50

私はMavenプロジェクトで数年の経験があります。マルチモジュールプロジェクトでも( Mavenのマルチモジュール機能が嫌いになりました(免責事項が作成されました))、Mavenが本当に好きでも、入手できないものがあります。についての明確な答え:

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

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

私はいつも、この種の構造が実際の利益を伴わずに過度の複雑さをもたらすことを発見しました:どこに何かが欠けているのですか?(正直に言うと、earこの種の構造から利益を得ることができる人もいますが、その特定のユースケースを除いて、他の実際の使用と利益はありますか?)

4

5 に答える 5

35

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

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

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

その3か月後、RESTWebアプリを作成することにしました。既存のウェブアプリの新しいURLマッピングではなく、別のアプリとして実行したいと考えています。単純。もう1つのモジュール、特別ないじくり回しなしでMavenビルドの結果として作成された別のWebアプリ。ビジネスロジックはwebappとrest-webappの間で簡単に共有され、必要に応じてデプロイできます。

于 2013-03-21T22:39:00.083 に答える
17

マルチモジュールの主な利点は次のとおりです。

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

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

編集

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

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

于 2013-03-21T22:13:58.717 に答える
4

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

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

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

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

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

于 2013-03-21T22:08:39.140 に答える
1

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

セキュリティレイヤーを備えた3つのWebプロジェクトがある場合、コードを3回コピーして貼り付け、各プロジェクトに接続してみる必要があります。

しかし、セキュリティモジュールを特定のジョブでプロジェクトに作成するとどうなるでしょうか。アプリに挿入してブームさせることで簡単に使用できます。

また、@ ben75の回答で述べたように、one maven buildコマンドと、使用済みのすべてのjarをビルドする正しい順序。どちらが別のものに依存するかについては、これ以上考えることはありません。

于 2019-03-30T22:02:39.890 に答える
0

Mavenモジュールは、次の理由で非常に便利です。

  • アーキテクチャの階層化と境界

たとえばapplication-contract、プレゼンテーション層が認識するインターフェイスを含むMavenモジュールを作成します。だから私はUI->Presenter->application-contract<-application-impl<-infrastructure->ドメインを持っています。このようにして、プレゼンテーション/UIレイヤーがドメイン/アプリケーションレイヤーのクラスにアクセスできないことがわかります。UIでコーディングするときにドメインクラスがクラスパスにない場合、それらを使用することはできません。そして、私はこのようにそれが好きです(クラスパス制限を利用します)。おそらくJava9モジュールでもこの​​問題を解決できますが、(残念ながら)私はJava8を使用しています。

  • 毎回1つのモジュールでテストを実行する

(前述のように)コードをモジュールであるレイヤーに変更すると、変更しなかったコードからテストを再実行せずに、そのテストのみを実行できます。これは私にスピードを与えます。私のプレゼンテーション層のテストには約3秒かかります(300回のテストの場合)。コードをプレゼンターまたはアプリケーション層の下にあるものに変更するたびに、データベースのH2統合テストを実行したくありません。または、マイイメージ処理テストを実行します。これらはIOを実行し、低速であるためです。

  • 建物

ほぼ同じことです。コードをUIに変更すると、UIをビルドしてデプロイするだけで済みます(私のUIはJavaです)。

于 2021-05-25T15:04:08.047 に答える