web-dev-qa-db-ja.com

Maven Multi Moduleは単純な依存関係よりも優れています

私は数年のMavenプロジェクトでの経験を持っていますが、マルチモジュールのプロジェクトでも(これによりhateMavenのマルチモジュール機能ができました(免責事項は今完了))そして私が本当にmavenが好きなのに、私は明確な答えを得ることができないものがあります:

マルチモジュールのmavenプロジェクトの典型的なユースケースは何ですか?単純な依存関係や親pomと比較して、そのような構造の付加価値は何ですか?

マルチモジュールプロジェクトの多くの構成を見てきましたが、成果物として自分自身の生活を送る依存ライブラリの単純な構造を作成することで、それらすべてを明確に対処することができました(親pomでも、個別の成果物として:依存関係と構成の因数分解) )そして、マルチモジュール構造の付加価値を明確に見ることができるユースケースは見つかりませんでした。

私は常に、この種の構造が本当の利点なしに過度の複雑さをもたらすことを発見しました。 (正直に言うと、一部のearがこの種の構造から利益を得ることができますが、その特定のユースケースを除いて、他の実際の使用と利益はありますか?)

42
benzonico

これが実際のケースです。

私はマルチモジュールプロジェクトを持っています(そしてあなたの怒りに...私はそれとの合併症を見ていません。)最終結果はwebappですが、api、impl、およびwebappには異なるモジュールがあります。

プロジェクトを作成してから12か月後、jarから実行されるスタンドアロンプ​​ロセスを使用してAmazon S3と統合する必要があることに気付きました。 api/implに依存する新しいモジュールを追加し、新しいモジュールに統合するためのコードを記述します。 Assemblyプラグイン(またはそのようなもの)を使用して実行可能なjarを作成し、Tomcatにデプロイできる戦争と、別のサーバーにデプロイできるプロセスができました。 S3統合プロセスにWebクラスがなく、webappにAmazonの依存関係もありませんが、apiとimplのすべてのものを共有できます。

その3か月後、REST webappを作成することにしました。既存のwebappの新しいURLマッピングだけでなく、別のアプリとして作成したいと考えています。シンプルです。もう1つのモジュール、別のwebappを作成しましたビジネスロジックはwebappとrest-webappの間で簡単に共有され、必要に応じて展開できます。

32
digitaljoel

マルチモジュールの主な利点は、

  • すべてのモジュールを一度にビルドするための単一のmavenコマンド。
  • そして最も重要なのは、mavenがビルドの順序を処理することです。
  • cIサーバーの構成も非常に簡単です。すべてを構築するための単一のjenkinsジョブです。

私はすでに約30のサブモジュールを持つプロジェクトで働いていました。場合によっては、モジュール以外のものを変更し、単一のコマンドを実行して、コンパイルする必要があるすべてが正しい順序でコンパイルされていることを確認する必要があります。

[〜#〜]編集[〜#〜]

なぜ30のサブモジュールなのですか?

多くの機能、多くの開発者、モジュールベースでの機能の分離を備えた巨大なフレームワーク。これは実際の使用例であり、コードをモジュールに分離することは非常に有意義でした。

16
ben75

私はあなたがマルチモジュールを使用するほとんどのプロジェクトで正しいと思います、実際にはそれらを必要としません。

私が作業している場所では、マルチモジュールプロジェクトを使用しています(それには、十分な理由があると思います)。サービス指向アーキテクチャーに似ているので、各アプリケーションは

  • クライアントモジュール
  • インターフェースモジュール(クライアントと実装の間で共有オブジェクトを持っています)
  • 実装モジュール
  • 戦争モジュール

その実装モジュールとwarモジュールを同じ実際のモジュールに配置しても問題ないことに同意しますが、(間違いなく)これの利点は、問題を解決するクラスとアプリケーションが外部の世界と通信する方法を明確に区別できることです。

Webアプリケーションのみを含む以前のプロジェクトでは、使用しているモジュールを考慮して、テストを容易にするために、すべてを同じモジュールに配置しようとしました。

3
Augusto

マルチモジュールは、コードの再利用に役立ちます。仕事で感じる最高のメリットの1つです。

セキュリティレイヤーを備えた3つのWebプロジェクトがある場合を想像してください。コードを3回コピーアンドペーストして、各プロジェクトに接続する必要があります。

しかし、特定の仕事を伴うプロジェクトをセキュリティモジュールとして作成するとどうなるでしょうか。それをあなたのアプリに注入し、それが機能することをブームすることでそれを使いやすくするでしょう。

また、@ ben75の回答で述べたように、1つのmavenビルドコマンドと、使用されているすべてのjarをビルドする正しい順序。あなたはもうどれが別のものに依存するかについてもう考えないでしょう。

1
Waleed Emad