Maven 2.0.9以降、含めることができる可能性があります
<type>pom</type>
<scope>import</scope>
<dependencyManagement>
セクション。
私が理解しているように、このpomに含まれる依存関係は、元々ここで定義されているかのように「置換」されます。
上記のソリューションとimport
スコープなしのこのPOMへの単純な依存関係の違いは何ですか(後者は「依存関係グループ化」と呼ばれています)。そのような「グループ化された」依存関係は、依存関係の優先順位を解決する際に優先順位が低いという唯一の違いはありますか?
インポートできるのは管理対象依存関係のみです。これは、他のPOMをプロジェクトのPOMのdependencyManagement
セクションにimportしかインポートできないことを意味します。つまり.
...
<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>
...
すると、other-pom-artifact-id
のdependencyManagement
セクションで定義されたすべての依存関係がPOMのdependencyManagement
セクションに含まれます。その後、dependency
などを含めることなく、POM(およびそのすべての子POM)のversion
セクションでこれらの依存関係を参照できます。
ただし、POMでother-pom-artifact-id
への通常の依存関係を定義するだけの場合、other-pom-artifact-id
のdependencies
セクションのすべてのdependency
はプロジェクトに推移的に含まれますが、定義される依存関係other-pom-artifact-id
のdependencyManagement
セクションにはまったく含まれていません。
したがって、基本的に、2つの異なるタイプの依存関係(管理対象依存関係と通常の依存関係)をインポート/含めるために、2つの異なるメカニズムが使用されます。
MavenのWebサイトには、これよりもはるかに優れた説明ができる良いページがあります Mavenの依存関係管理 また、 依存関係のインポート に関する特定の情報も含まれています。
pom
タイプのプロジェクトを別のプロジェクトのsimple dependency
として使用することはできません。 (まあ、できます-しかし、それは何の役に立つこともしません)。 parent-child
関係のみが可能です。これは基本的にmanaging dependency through inheritance
です。
<dependencyManagement>
セクションのimport
型依存関係のpom
スコープにより、multiple inheritance
と同等の機能を実現できます。
異なるpoms
-それぞれmanaging
に関連する依存関係の束を持つことができます。これらを使用するプロジェクトはimport
これらpoms
を使用し、バージョンを気にすることなく必要な依存関係を指定できます。これは基本的にbill of materials
の概念であり、@ DB5で指定されたリンクに示されています。
これにより、複雑なマルチモジュールプロジェクトのparent poms
が大きくなりすぎて扱いにくくなります。
オブジェクト指向プログラミングのパラダイムに非常によく似た2つの概念が、質問に答えるのに役立ちます。
dependencyManagementセクションは、現在のプロジェクトの依存関係とその詳細のみを宣言します-目的は詳細を管理し、継承を介して他のプロジェクトで再利用することです(parent)またはimport(scope)これは、プログラムでデータ型を宣言し、使用できるようにすることと似ています。
dependencyセクションは、プロジェクト内の依存関係の実際の使用を定義し、オプションで詳細(バージョンなど)を継承します。 )dependencyManagmentで宣言された依存関係の。そのため、dependencyManagmentにのみ依存関係を置くと、依存関係が失われます。これは、必要な場合にプログラムでデータ型の変数インスタンスをインスタンス化することに似ています。