0

大規模な(100モジュールを超える)マルチモジュールMavenプロジェクトのアセンブリを作成しようとしています。

すべてではありませんが、一部のモジュールには、最終的なアセンブリに含める必要のあるさまざまなファイルがありますが、それらをそこに配置する方法を理解するのに苦労しています。

典型的なモジュールのレイアウトは次のとおりです。

+- pom.xml
+- src
|  +- main
|     +- java
|        +- ...
|     +- resources
|        +- ...
|     +- scripts
|        +- ...

このモジュールにはJARパッケージが含まれているため、主要なアーティファクトはJARファイルです。

最終的なアセンブリの目的の形式は次のとおりです。

+- bin
|  +- <union of all files from src/main/scripts in the various modules>
+- lib
|  +- <union of all JAR files produced by the various modules>

アセンブリ構造のlib部分を実行する方法は知っていますが、 bin部分を実行する方法がわかりません。

このブログ投稿は、各モジュールが独自のアセンブリ(基本的にはアセンブリフラグメント)を作成する必要があることを示唆しているようです。これらはすべて、実際のアセンブリコンポーネントによって集約されます。

これはMavenで行われる方法ですか?それはひどく重い&遅いようです。別の/より良い方法はありますか?

回答する前に、次の事実に留意してください。

  1. このプロジェクトはフラットモジュール構造を使用しています(それが重要な場合)。ネストされた構造に変更することはオプションではありません。
  2. スクリプトを1つのモジュールに統合できません。他にも、最終的なアセンブリにパッケージ化する必要があり、1か所に統合​​できない任意のファイルが存在する可能性があります(問題を説明するための簡単な例としてスクリプトを使用しました)。
  3. はい、100モジュールは多すぎると思いますが、これを制御することはできません。
  4. モジュールの数が多いことを考えると、すべてのPOMを変更する必要のないソリューションをお勧めします。
4

2 に答える 2

0

各モジュールが独自のアセンブリを持つのではなく、assembly(名前は任意)という個別のモジュールを作成し、アセンブリ記述子が相対パスを使用して他のモジュールから任意のファイルを取得するようにします。つまり

<files>
    <file>
      <source>../config-module/target/sample-config.xml</source>
      <outputDirectory>configs</outputDirectory>
    </file>
</files>

パス../config-moduleは、その名前のモジュールがあることを前提としています。また、ディレクトリではなくsample-config.xmlファイルを取得するとします。target/src/main/whatever

「任意のファイル」が各モジュール(つまりWAR)によって生成されたMavenアーティファクトである場合、上記を達成するためのより理想的な方法がある可能性があることに注意してください。参照: Maven:完全なリファレンス-「ベストプラクティス」

于 2012-08-27T20:27:00.167 に答える
0

残念ながら、アセンブリのアセンブリを作成する以外に、より良い答えを見つけることができませんでした。アセンブリのアセンブリを使用するのは状況を考えると非常に面倒なので、この要件を処理するために独自のMavenプラグインを作成するようです。

于 2012-08-31T16:42:38.880 に答える