2

SmartClient アーキテクチャを持つプロジェクトに Maven をセットアップする最良の方法は何ですか? 次のパッケージを検討してください。

  • myproject.core
  • myproject.server
  • myproject.client

もちろん、それぞれにいくつかのサブパッケージがあります。クライアントとサーバーは両方ともコアを使用します。2 つの主なオプションがあります。

  1. myproject で uber-POM を作成して 3 つすべてをカバーし、何をビルドするかを特定するための何らかのビルド パラメーターを用意します。
  2. 上記の各パッケージで POM を作成します (1 つはコア用、もう 1 つはサーバー用、もう 1 つはクライアント用)。

構築する必要がある出力は次のとおりです (少なくとも)。

  • Standalone.jar: サーバーとクライアントを起動するテスト アプリケーション。
  • Server.war: Tomcat にデプロイできる WAR ファイル。
  • Client.jar: サーバー コードを含まない SmartClient。

オプション#1は可能ですか?もしそうなら、それは良い習慣ですか?私の最初の調査から、オプション #2 はベスト プラクティスのように思えます。ただし、すべてのコードが密接に関連している場合に POM から POM にジャンプすることは、余分な作業や不要な混乱のように思えます。オプション#2に固執する必要がありますか?

4

1 に答える 1

1

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 コマンドを起動します (別名「マルチモジュール ビルド」)。

于 2010-01-14T22:28:41.563 に答える