135

Maven 2.0.9以降、含める可能性があります

<type>pom</type>
<scope>import</scope>

<dependencyManagement>セクションで。

私が理解しているように、最初にここで定義されたかのように、この pom に含まれる依存関係に「置き換え」られます。

上記のソリューションとスコープのないこの pom への単純な依存関係の違いは何ですかimport(後者は「依存関係のグループ化」と呼ばれています)。依存関係の優先順位を解決している間、そのような「グループ化された」依存関係の優先度が低いという唯一の違いはありますか?

4

3 に答える 3

209

管理された依存関係のみをインポートできます。これは、プロジェクトの POM のセクションにのみ、他の POM をインポートできることを意味します。dependencyManagementすなわち

...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>other.pom.group.id</groupId>
            <artifactId>other-pom-artifact-id</artifactId>
            <version>SNAPSHOT</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>   
    </dependencies>
</dependencyManagement>
...

次に、 のセクションで定義されたすべての依存関係dependencyManagementother-pom-artifact-idPOM のdependencyManagementセクションに含まれます。次に、これらの依存関係をdependencyPOM (およびそのすべての子 POM) のセクションで参照できますversion

ただし、POM で通常の依存関係を定義するだけで、 のセクションのother-pom-artifact-idすべてが推移的にプロジェクトに含まれますが、 のセクションで定義された依存関係はまったく含まれません。dependenciesdependencyother-pom-artifact-iddependencyManagementother-pom-artifact-id

したがって、基本的に、2 つの異なるタイプの依存関係 (管理された依存関係と通常の依存関係) をインポート/含めるために、2 つの異なるメカニズムが使用されます。

Maven の Web サイトには、これを私よりもはるかにうまく説明できる良いページがあります。Maven の依存関係管理であり、依存関係のインポートに関する特定の情報も含まれています。

于 2012-08-02T14:14:28.547 に答える
19

pomタイプ プロジェクトを別のプロジェクトの として持つことはできませんsimple dependency。(まあ、できますが、何も役に立ちません)。parent-child関係しかありえません。これは本質的にmanaging dependency through inheritanceです。

importpomセクションのタイプの依存関係のスコープ<dependencyManagement>により、 と同等のものを実現できますmultiple inheritance

異なる可能性がありますpoms-それぞれmanagingに関連する依存関係の束。これらを使用するプロジェクトは、これらを使用importpomsて、バージョンを気にすることなく必要な依存関係を指定できます。これは本質的にbill of materials概念であり、@DB5 によって指定されたリンクに示されています。

これによりparent poms、複雑なマルチモジュール プロジェクトが大きくなりすぎて扱いにくくなるのを防ぐことができます。

于 2012-08-02T17:26:30.107 に答える
9

オブジェクト指向プログラミングのパラダイムに非常によく似た 2 つの概念が、この質問に答えるのに役立ちます。

  1. dependencyManagementセクションは、現在のプロジェクトの依存関係とその詳細のみを宣言します。目的は、詳細の管理と、継承 () またはインポート (スコープ)による他のプロジェクトでの再利用です。これは、プログラムでデータ型を宣言して使用できるようにするようなものです。

  2. 依存関係セクションは、プロジェクトでの依存関係の実際の使用を定義し、必要に応じて、dependencyManagment で宣言された依存関係の詳細 (つまり、バージョンなど) を継承します。そのため、依存関係をdependencyManagmentに入れるだけでは、依存関係が失われます。これは、プログラム内で必要なデータ型の変数インスタンスをインスタンス化することに似ています。

于 2016-07-20T00:28:32.973 に答える