免責事項
(私は当初、非常に詳細に質問しましたこちらメーリング リストでこの質問が静かになったため、ここで抜粋しました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>
次に、(a) project から継承し(したがってそのセクションを継承し)、(b)を指定せずに、アーティファクト への依存関係を確立するpom.xml
projectの が表示されます。また、アーティファクト への依存関係によって のスコープがではなくにオーバーライドされることにも注意してください。B
A
dependencyManagement
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
スコープではなく、スコープ内の1.0
成果物のバージョンに依存します。c
runtime
compile
あれは正しいですか?私のmaven-ear-plugin
バグこれは予想される動作であるという事実に基づいています。これは、ファイルをmaven-ear-plugin
ビルドするときに発生する動作ではありません.ear
。
次に、もしそれが正しいなら、アーティファクトにc
推移的な依存関係があれば、それらはのクラスパスruntime
で利用可能になるはずです(B
runtime
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope)。
あれは正しいですか?
ベストアンサー1
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
依存関係が明示的に定義されている内scope
の の依存関係は、実際には であり、親 pom の セクションで定義されたスコープをオーバーライドします。mear-143-leaf
mear-143-middle
runtime
test
dependencyManagement
mear-143
にはmear-143-ear
、mear-143-leaf
が含まれる推移的にここでは、oftest
で定義されたスコープが継承されたスコープよりも優先されます。dependencyManagement
mear-143
runtime
これは、あなたが上で参照したセクションの 2 番目の箇条書きで指定されている内容と一致していると思います。ここでそれを引用し、関連部分を太字と斜体で強調します。
bはBの親の依存関係管理セクションで定義されており、推移的な依存関係の場合、依存関係管理は依存関係仲介よりも優先されます。、バージョン1.0は、aまたはcのpomで参照される場合に選択されます。bにもコンパイルスコープがあります。