2017-09-09 14 views
4

私は共通の親プロジェクトの子である2つのプロジェクトを持っています。ジェネレータプロジェクトと、ジェネレータ用の対応するMavenプラグインプロジェクトもあります。また、両方の子プロジェクトは、コード生成のために使用される同一の入力ファイル、使用している:Maven:プロジェクト間でソースを共有する

parent: pom 
    child1: jar 
    src/main/generator/input.gen 
    child2: jar 
    src/main/generator/input.gen 
    generator: jar 
    generator-plugin: maven-plugin 

を発生プラグインは、社内製のMavenプラグインである:

@Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true) 
public class GeneratorPlugin extends AbstractMojo { 
    @Parameter(required = true, readonly = true, defaultValue = "${project}") 
    private MavenProject project; 
    @Parameter(required = true, defaultValue = "${project.basedir}/src/main/generator/input.gen") 
    private File   input; 

    ... 

}

Currenlty、input.gensrc/main/generator/input.genchild1child2の両方に複製されています。これは問題だ。私はinput.genのバージョンを1つだけ持っています。

プロジェクトをどのように構造化すればいいですか?また、この2つの子プロジェクトのpomのgenerator-pluginプラグインの<configuration><input>...</input></configuration>でこの共有コピーを参照する必要がありますか?

+0

最初にconあなたがあなたのプラグインを実行するたびにソースコードが変更されることを意味するバージョンコントロールにチェックインされているため、 'src'にリソースなどを生成することはありません。最適な場所は 'target'ディレクトリに物を生成することです。これはデフォルトではバージョン管理によって無視されます。さらに、生成されたリソースは、生成されたjarファイルにパッケージ化されます。ここでは、他のモジュールによってもクラスパスによってリソースにアクセスできます。 – khmarbaise

+1

@khmarbaise私は誤解や混乱があると思います。 'input.gen'は入力リソースであり、スキーマ、モデルなどの定義が含まれています。これらのクラスについては、ジェネレータによって生成されなければなりません。言い換えれば、それはリソースを生成しません。 –

+0

ああ今私はそれを得た私のサイトで申し訳ありませんが誤解。しかし、これは 'input.gen'とこのファイルからクラスを生成する適切なプラグインを含むモジュールを1つしか持たないことを意味します。結果として、他のモジュールから再利用できるjarファイルが得られます。何も複製せずに... – khmarbaise

答えて

3

Maven Remote Resources Pluginがお探しのものである可能性があります。

ここにはexampleがあります。

+0

ありがとうございます。私はそれを試し、あなたに知らせるでしょう! –

+0

これはうまくいった!ありがとうたくさんのPruce。 –

0

私のテイクは(テストしていません)、次のようになります。

  • src/main/resources
  • で共有依存関係にinput.genを入れ、入力としてクラスパスリソースを受け入れるように発電機を修正代わりに/ファイルに加え
  • を追加しますinput.genと共有依存関係がprovidedスコープとして最終製品にならないようにします。
+0

2番目のステップをどのように実行できるか詳しく教えてください。 –

+1

など。入力パスを 'String'とし、' getClass()。getResourceAsStream() 'を実行して' InputStream'を関連付けます。 –

+0

ありがとう、賢いアイデア。しかし、私はこのような問題のための専用のプラグインなので、他の提案を好む。 –

関連する問題