6

次のエンタープライズアプリケーションの階層化の例を考えてみましょう。

  1. project-services->POJOサービスレイヤー
  2. project-web-> Webアプリケーション、WARとしてデプロイされた「project-services」に依存
  3. project-web-services-> Web Servicesは、「project-services」に依存し、別のWARとしてデプロイされ、現在インターネット上で公開されていません
  4. project-standalone-> Cron Jobs、「project-services」に依存

Mavenでこれを整理するための正しいアプローチは何でしょうか。マルチモジュールのMavenプロジェクトを作成する必要がありますか?'project-services'がMavenモジュールの場合、それぞれが独立したデプロイ可能なユニットである他の3つのプロジェクトと共有できますか?

以前のプロジェクトでは、4つの異なるMavenプロジェクトを作成しただけで、他に何も必要だと感じたことはありません。

私が以前やってきたことよりも良い方法があるかどうかを検証したい。

4

4 に答える 4

2

実際にはどちらのアプローチも実行できます。それが本当に1つの大きなプロジェクトであり、常にビルドとリリースを同時に行いたい場合は、マルチモジュールプロジェクトが適しています。おそらく次のように設定します。

pom project (top level project that would define all of the modules)
  jar project (project-services)
  war project (project-web)
  war project (project-web-services)
  project-standalone (wasn't sure if this was a jar, or just some scripts, etc)

したがって、ルートプロジェクトをビルドしてリリースするだけで、すべてのサブモジュールが自動的に処理されます。それらはそれぞれ相互に依存関係を持つことができます(循環依存関係に注意してください)。そして、あなたはほとんど行く準備ができているでしょう。

もう1つのオプションは、アーティファクトを完全に分離することです。異なるリリースサイクルがあるという利点があります。これは、頻繁に変更されないjarライブラリがあるが、戦争を頻繁に更新する場合に適したオプションです。

そして明らかに、あなたはミックスを持っている可能性があるので、おそらくjarはスタンドアロンですが、2つのwarファイルを含むマルチモジュールプロジェクトがあります。Mavenの利点は、これらをどのように分割するかについて、ビジネスケースを処理するのに十分な柔軟性があることです。

于 2012-02-10T12:58:18.277 に答える
1

私の職場には、ライブラリを共有する多くのトップレベルのプロジェクトがあります(15のトップレベルのプロジェクトが35ほどのライブラリを共有しています)。ライブラリごとに1つのプロジェクトを採用しました。今日、それらすべてを一度にリリースしなければならないとき、それは悪夢です。

私たちが直面するいくつかの問題:

  • 依存関係を手動で把握する
  • リリースを適切な順序で実行する必要があります
  • 1つの失敗でリリース全体が停止します

もう一度やり直す必要がある場合(これをすべて設定するのを手伝いました)、単一のマルチモジュールプロジェクトを使用します。他に何もないとしても、すべてを一度にリリースすることは大きな利点です。プロジェクトは日食ではきれいに見えないかもしれませんが、とにかくそれはあなたが目指すべきものではありません。

于 2012-02-11T07:27:44.087 に答える
0

私は確かに、一般的なサードパーティライブラリの使用バージョンが一致することを保証するために、モジュール用の単一のプロジェクトを使用します。

POMプロジェクトをルートとして使用し、すべての実装およびその他のアーティファクトを共有することは、通常、単一モジュールプロジェクト以外のすべての場合に適切な方法と見なされます。

于 2012-02-10T13:06:45.717 に答える
0

モジュール間に直接依存関係があるので、マルチモジュールプロジェクトにもお勧めします。

私がよくお勧めするのは、モジュールのライフサイクルを検討することです。例:バッチモジュールをサービスレイヤーよりもはるかに頻繁にリリースする場合は、分割するのが理にかなっている場合があります。したがって、変更がなかったものをリリース(デプロイ)する必要はありません。バッチは通常、.warファイルと同じ方法でデプロイされないためです。しかし、それはサービス+バッチモジュールのライフサイクルに依存します。

ほとんどの場合、並べて移動します。つまり、「すべてに1つ」の場合は+1

于 2012-02-15T09:29:42.587 に答える