(私はもともと非常に詳細な方法で質問をしました ここ 。maven-users
メーリングリストがこの質問について沈黙しているので、ここでそれを抜粋しました。)(単に別の初心者の質問ではありません)
私の参考資料は http://maven.Apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management ;です。これが古いか間違っている場合は、このディスカッションでお知らせください。
そのドキュメントには、「2番目の非常に重要な...」で始まるセクションがあります。以下では、そのセクションのプロジェクトA
およびB
を参照し、それらから抜粋します。
そのセクションでは、プロジェクトA
に<dependencyManagement>
セクションがあり、スコープc
を持つアーティファクトcompile
を定義していることがわかります。
<!-- In A's pom.xml; condensed for brevity -->
<dependencyManagement>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<scope>compile</scope> <!-- look: compile scope -->
</dependency>
</dependencyManagement>
次に、プロジェクトB
のpom.xml
が表示されます。これは、(a)プロジェクトA
から継承され(したがって、そのdependencyManagement
セクションを継承します)、(b)アーティファクトへの依存関係を確立しますc
、version
を指定する必要はありません。また、アーティファクトc
の依存関係がc
ではなくruntime
になるようにcompile
をオーバーライドすることにも注意してください。
<!-- In B's pom.xml, whose parent is A's pom.xml (above); condensed for brevity -->
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<scope>runtime</scope> <!-- look: runtime scope -->
</dependency>
</dependencies>
繰り返しますが、<version>
要素はありませんが、<scope>runtime</scope>
要素はあります。
これについての私の解釈は、すべてが言い終えられたとき、B
は、c
スコープのアーティファクト1.0
のバージョンruntime
に依存するということです。 、compile
スコープではありません。
あれは正しいですか? My maven-ear-plugin
バグ は、これが予想される動作であるという事実に基づいています。 maven-ear-plugin
が.ear
ファイルをビルドするときに起こることではありません。
次に、それが正しい場合、アーティファクトc
に推移的なruntime
の依存関係がある場合、それらはB
のruntime
クラスパス(やや不可解なものによって定義される)で使用可能になることも期待します http://maven.Apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope )の表.
あれは正しいですか?
上記で指定した バグリンク に投稿されたサンプルプロジェクトでmvn dependency:tree
を実行すると、
[INFO] Building MEAR-143 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143 ---
[INFO] ljnelson:mear-143:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 Leaf 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-leaf ---
[INFO] ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 Middle 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-middle ---
[INFO] ljnelson:mear-143-middle:jar:1.0-SNAPSHOT
[INFO] +- ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT:runtime
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 EAR 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-ear ---
[INFO] ljnelson:mear-143-ear:ear:1.0-SNAPSHOT
[INFO] +- ljnelson:mear-143-middle:jar:1.0-SNAPSHOT:runtime
[INFO] | \- ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT:test (scope managed from ru
ntime)
[INFO] \- junit:junit:jar:4.8.2:test
依存関係が明示的に定義されているmear-143-leaf
のmear-143-middle
の依存関係scope
は、実際にはruntime
であり、親pomのtest
セクションで定義されているdependencyManagement
スコープをオーバーライドしますmear-143
。
mear-143-ear
には、mear-143-leaf
が含まれますtransitively。ここで、mear-143
のtest
で定義されているdependencyManagement
スコープは、継承されたruntime
スコープよりも優先されます。
これは、上記で参照したセクションの2番目の箇条書きで指定されているものと一致していると思います。ここでそれを引用し、関連部分を太字と斜体で強調表示します。
bはBの親の依存関係管理セクションで定義されており、依存関係管理は推移的依存関係の依存関係メディエーションよりも優先されるため、それが参照される場合はバージョン1.0が選択されますaまたはcのpom。 bにもコンパイルスコープがあります