Maven には、プロジェクトごとに 1 つのアーティファクトしか存在しないという一般的な規則があります。つまり、オプション #1 では、maven と戦わずに server.war や client.jar などを作成することはできません。これは大混乱になり、maven プラグインを利用できなくなります。いいえ、本当に、あなたはこれを望んでいません。したがって、次のような構造でオプション#2を選択してください(src
ディレクトリを省略):
.
|-- core
| `-- pom.xml
|-- server
| `-- pom.xml
|-- client
| `-- pom.xml
`-- pom.xml
POM から POM へのジャンプに関する懸念については、すべてのモジュールを IDE にインポートするだけで、実際には気付かないでしょう。これは、多くの人にとって非常にうまく機能します。
UPDATE(コメントでOPからの質問をカバーするため):
Maven との戦いは面白くないように思えます。
いいえ、あなたは負けます:)
ルート レベルの pom.xml には何がありますか?
これはProject Aggregationに使用される親 POMです。POMドキュメントの紹介を引用:
プロジェクトの集約は、プロジェクトの継承に似ています。ただし、モジュールから親 POM を指定する代わりに、親 POM からモジュールを指定します。そうすることで、親プロジェクトはそのモジュールを認識するようになり、Maven コマンドが親プロジェクトに対して呼び出された場合、その Maven コマンドは親のモジュールに対しても実行されます。プロジェクト集約を行うには、次のことを行う必要があります。
- 親 POM パッケージングを値 "pom" に変更します。
- 親 POM でそのモジュール (子 POM) のディレクトリを指定します。
プロジェクトの集約とプロジェクトの継承は、しばしば一緒に使用されます。詳細については、前述のドキュメントを参照してください。
「プロジェクトごとに 1 つのアーティファクト」とは、Standalone.jar、Server.war、および Client.jar (合計 3 つの POM) に個別の POM が必要であることを意味しますか?
はい、これはつまり、1 つのプロジェクトが 1 つのアーティファクトを生成するということです (いくつかの例外はありますが、これは 99% の確率で当てはまります)。これは、従うべき (従わなければならない?) 優れたベスト プラクティスです。
Grizzly を含む単純なサーバーである Server.jar も必要な場合はどうすればよいですか? サーバーには 2 つの POM が必要ではないでしょうか?
これを処理するMavenの方法はアセンブリを使用することであり、あなたの質問に対する一意の答えはありません(これは上記のルールの例外の1つかもしれません)。しかし、これで開始が妨げられることはありません。
また、3 つすべてのアーティファクトが生成されるようなビルドを開始するにはどうすればよいでしょうか?
これまで見てきたように、集約プロジェクトから Maven コマンドを起動します (別名「マルチモジュール ビルド」)。