2

次の構造のプロジェクトがいくつかあります:プロジェクトA、B、C

それらはすべて、Dフォルダーの下のpom.xmlの親プロジェクトDの下にあります。

<module>A</module>
<module>B</module>
<module>C</module>

それらの間の依存関係は次のようになります:A<-B<-C。

そして、A、B、Cは多くの共通の依存関係を共有しています。

1.この場合、サブpomを非常に軽くするために依存関係を整理するためのベストプラクティスは何ですか?また、重複する依存関係は除外されますか?

2.親pomの「依存関係」セクションに何を入れ、「依存関係管理」セクションに何を入れるべきですか?

3.一般的な依存関係は次のようなものです。

log4j, slf4j, thrift, jetty, javax.servlet etc... 

それらのほとんどは、私のプロジェクトで直接必要とされる以外の推移的な依存関係です。それらを依存関係として親Dのpom.xmlに配置し、サブプロジェクト(A、B、C)にDから継承させるのは理にかなっていますか?そうすると、mvndependency:treeが次のような警告を出すことに気づきました。

[WARNING] Unused declared dependencies found: log4j, slf4j ....

それが私に警告を与える場合、私はそれがMavenがあなたに勧めていないことだと思いますか?

4

1 に答える 1

4
  1. 最も重要:モジュールに直接必要な依存関係のみを宣言します。モジュールとその依存関係について詳しく知らずに、具体的なことを提案することは困難です。あなたの場合の一般的な依存関係の例は何ですか?モジュールを再編成すると、一般的な依存関係を減らすのに役立つかもしれません。プロジェクトによっては、同じアーティファクトに依存するモジュールA、B、およびCのすべてのクラスを新しいモジュールEに配置することが合理的である場合があります。
  2. 私の意見では、親pomの依存関係セクションには何も入れてはいけません(そして警告を見ると、Mavenは同じように感じているようです;-))。少なくとも、複数のモジュールで使用されている依存関係のすべてのバージョンを、親の依存関係管理セクションに配置します。これにより、プロジェクト全体で特定の依存関係の同じバージョンを常に維持できます。
  3. 2.と同様に、親の依存関係管理セクションでこれらのアーティファクトのバージョンのみを指定し、バージョンを指定せずに、それを必要とする各モジュールでそれらを繰り返す必要があります。1.で述べたように、直接の依存関係のみを指定する必要があります。たとえば、slf4jを使用している場合は、メインクラスを含むモジュールにlog4jのみが必要です。

総括する:

  • モジュールの直接の依存関係のみを宣言します。推移的な依存関係はmavenによって自動的に処理されます(これがmavenを使用する主な理由の1つです)。
  • 必要な依存関係のみを宣言します。たとえば、slf4jの場合、に応じて1つのモジュールのみが必要でありslf4j-log4j12、他のすべてのモジュールはslf4j-apiにのみ依存する必要があります。
  • すべてのサブモジュールが同じバージョンを使用するように、親pomでバージョンを定義します。このdependencyManagementようなセクションでこれを行います:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.4</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

  • モジュールごとに、モジュールpomのすべての直接依存関係を指定しますが、次のようなバージョンは指定しません。

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
    </dependencies>
    

多くのモジュールで共有される多くの依存関係を処理するには、次の方法も使用できますX。必要な各アーティファクトに依存するだけの新しい「依存関係収集モジュール」(これを呼び出します)を作成します。これで、各モジュールはX、その依存関係にも自動的に依存するために依存する必要があるだけです。ただし、この方法はお勧めしません。これは、(他の理由の中でも)各モジュールがの依存関係に依存しており、Xから依存関係を削除した場合に何が起こるかわからXず、モジュールを直接見つけるために複数のpomを調べる必要があるためです。依存関係。

これが少し役立つことを願っています:-)

于 2012-04-23T19:47:44.580 に答える