2012-02-10 9 views
5

は例を重ね、以下のエンタープライズアプリケーションを考えてみましょう:Mavenプロジェクト構造の作成に関するアドバイス - 複数のモジュールと複数のプロジェクト?

  1. プロジェクトサービス - > POJOサービス層
  2. プロジェクト - ウェブ - > Webアプリケーションは、WAR
  3. として展開、「プロジェクト・サービスの依存しますプロジェクトのWebサービス - 「プロジェクト・サービスの
に依存し、> Cronジョブ - > Webサービスは、現在のプロジェクト・スタンドアロン
  • インターネット上に露出しない、独立したWARとして展開、「プロジェクト・サービスの依存します

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

    以前のプロジェクトでは、私は単純に4つの異なるMavenプロジェクトを作成しましたが、それ以上のことは全く感じていませんでした。

    私がこれまで行っていたことよりも良い方法があるかどうかを検証したいと考えています。

    答えて

    2

    どちらの方法でも実際に行うことができます。それが本当に大きなプロジェクトであれば、いつでも同時にビルドしてリリースしたいと思うので、マルチモジュールプロジェクトが適しています。おそらく、このようにそれを設定したい:

    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) 
    

    をので、あなただけの構築およびルートプロジェクトオフ離し、そしてそれはあなたのためのサブモジュールのすべての世話をしたいと思います。彼らはそれぞれ互いに依存関係を持つことができます(循環依存に注意してください)。そして、あなたはかなり行くつもりです。

    他のオプションは、別々のアーティファクトです。利点は、リリースサイクルが異なることです。これは頻繁に変更されないjarライブラリを持っているときには便利ですが、頻繁に更新してください。

    明らかに、混在している可能性がありますので、単体はスタンドアロンですが、2つのwarファイルを含むマルチモジュールプロジェクトがあります。 Mavenのメリットは、ビジネス・ケースがどのように分割されているかに関わらず、柔軟に処理できることです。

    0

    一般的なサードパーティ製ライブラリの使用バージョンが一致するように、私は確かに1つのプロジェクトをモジュール用に使用します。

    POMプロジェクトをルートとし、すべての実装と他の人工物を共有することは、一般に、単一モジュールプロジェクトを除くすべてのものにとって良い方法です。

    1

    私の職場では、私たちの多くのトップレベルプロジェクトでは、図書館を共有しています(15のトップレベルプロジェクトでは35図書館を共有しています)。私たちは、ライブラリーごとに1つのプロジェクトに行きました。今日、一気にすべてをリリースしなければならない時は、それは悪夢です。

    いくつかの問題が、我々は直面している:

    • 手動で依存関係を把握
    • が適切な順序でのリリースを実行する必要が
    • 一つの失敗は、私はDに持っていた場合、全体のリリース

    を停止しますもう一度やり直してください(私はこれをすべて手助けしました)、私は単一のマルチモジュールプロジェクトを使用します。何もなければ、すべてを一気にリリースすることは大きな利点です。プロジェクトは日食ではきれいに見えないかもしれませんが、とにかく目指すべきものではありません。

    +0

    1つの巨大なプロジェクトの欠点は、しばしば変更が加えられていない成果物をリリースしていることです。私はリリースの問題を理解しているかもしれません。おそらくあなたがリリースするたびにすべてのアーティファクトを実際に変更します。その場合、面倒なことはありません。しかし、たった1つのアーティファクトをリリースする必要があるときに、それらをすべて変更なしでリリースすることは理想的ではありません。 – Michael

    0

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

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

    ほとんどの場合、横並びに移動します。だから+1 "すべての人のために"

    関連する問題