に子モジュールからのjarファイルを収集するために、Mavenの集約と継承を使用することができます。その目的は、サブモジュールC-1とC-2(それにはの親であるになる)と集約モジュールC-1とC-2が1つのタールボールをビルドするモジュールのC target
ディレクトリ。は、どのように私は、私は次のような構造を持つマルチモジュールのMavenプロジェクトを持っている親のtarボール
この目標をすることによって達成される:
- ルート
pom.xml
リストモジュール、B、及びC - モジュールC
pom.xml
リストモジュールC-1とC-2と共有依存関係を宣言する。パッケージ "pom"と宣言します maven-assembly-plugin
は、すべての*.jar
ファイルを子供のtarget
ディレクトリで見つけ、それらをtgzでパックするためにモジュールCで使用されます。
私はこの実装で直面するいくつかの問題があります。単純なものはC-1とC-2の自己依存性であり、Cからの依存関係を継承してコンパイルを拒否します。私はその依存関係をCのdependencyManagement
にラッピングするようにしました。
また、アセンブリプラグインにも問題があります。ファイルセットの値にwildcharsを使用すると、生成されたtarボールのディレクトリ構造が保持され、何もできないように見えます。だから私はそれがあまりにも重要ではありませんだけで
moduleC-version/moduleC-1-version.jar
moduleC-version/moduleC-2-version.jar
オーケーを、必要なときのtarballで
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.jar</include>
</includes>
<excludes>
<exclude>**/*-javadoc.jar</exclude>
</excludes>
</fileSet>
結果は構造
moduleC-version/moduleC-1/target/moduleC-1-version.jar
moduleC-version/moduleC-2/target/moduleC-2-version.jar
を持つモジュールCのbin.xml
に次なります。主な問題はReactor Build Orderです。どのような私はそれが
- モジュール
- モジュールBになりません
- モジュールC
- モジュールC-1
- モジュールC-2
そして、それはビルド以来の失敗ですモジュールC上で文句を言う
アセンブリの作成に失敗しました:アセンブリアーカイブビンの作成中にエラーが発生しました:少なくとも1つのファイルを設定する必要があります。 - > [ヘルプ1]
私の理解では、問題はReactor Build Order - C-1とC-2をCの前にビルドしなければならないということですが、管理方法はわかりませんそれはCを親に持ち、モジュール構造の上にとどまっています。
最も重要な部分は、maven-assembly-pluginの設定を含む別のモジュール(dist)を持つことです。そこでは、依存関係としてパッケージ化したいすべてのモジュールを定義して、各依存関係がモジュールdistの前に構築されていることを確認する必要があります。さらに[this](https://github.com/khmarbaise/assembly-examples/blob/master/assemblies-with-reactor/dist/proj1-assembly.xml)のような記述子を使用し、[this](https: //github.com/khmarbaise/assembly-examples/tree/master/assemblies-with-reactor)。 – khmarbaise
@khmarbaiseありがとう、それはオプションです、なぜあなたは答えとしてここに入れませんか?この例ではdist/pom.xmlのように見えますが、Reactorはすべての依存関係を明示的にリストする必要はありません。つまり、Reactorはモジュールをリストする順序を尊重するため、distを最後に置き、依存関係を取り除くだけです。 –
あなたが明示的にパッケージ化したいモジュールを 'dist/pom.xml'の依存関係として定義することを強くお勧めします。何らかの理由(新しいモジュールのマージ/変更/追加)でモジュールの順序を変更した場合、ビルドに失敗します。 。 – khmarbaise