私のプロジェクトにはさまざまなモジュールがあります。
親モジュールのpom.xmlを使用してパッケージ化しようとすると、「パッケージングjarは無効ですAggregatorプロジェクトはパッケージングとしてpomが必要です」というエラーが表示されます。
Mavenからアプリケーションの実行可能jarを作成するにはどうすればよいですか?
簡単に言うと、親アグリゲータープロジェクトにソースコードが含まれていない場合(そして、それが良い方法です)、これを親pom.xmlに追加するだけです:
<packaging>pom</packaging>
親プロジェクトにソースコードが含まれている場合、次のことを強くお勧めします。
commons
と呼びましょう)commons
を親プロジェクトの子モジュールにしますcommons
モジュールを、それを必要とする他のすべてのモジュール(おそらくすべて)の依存関係として追加します<packaging>pom</packaging>
親pom.xml内Mavenでは、親がpackaging
pom
である必要があります。
pom
プロジェクトをjar
プロジェクトであるかのように動作させるには、多数のプラグイン実行を含め、それらを後続のライフサイクルフェーズにアタッチします。それは幸せな道ではありません。それどころか、次のisです。
オブジェクト指向の観点から、あなたが望むものは何ですか?他のオブジェクトの束から構成されるオブジェクトが1つありますよね?つまり、継承ではなくcompositionです。
最終配信は、他の(jar
)プロジェクトで構成されます。つまり、他のプロジェクトは最終配信プロジェクトの依存関係です。他のプロジェクトをそれぞれdependency
として定義して、最終配信を使用する人が取得する(推移的な)依存関係を把握できるようにします。または、最終配信jar
を "uber -jar
" としてパッケージ化し、すべての依存関係を含めることもできます。それはすべて、最終的な配信の使用方法に本当に依存します。
同時に、次の2つの側面が(まだ)存在します。
parent
構成を介して親を参照するプロジェクトです。modules
を定義するプロジェクト。モジュールは、modules.module
を使用して参照されるプロジェクトです。これは通常、親プロジェクトで行われます(99%を超えると思います)が、必ずしもそうではありません。それを最終的な配信プロジェクトに入れることもできます(継承に影響を与えることなく、それは別の獣だからです)。