Maven の依存関係の解決とスコープのオーバーライド 質問する

Maven の依存関係の解決とスコープのオーバーライド 質問する

免責事項

(私は当初、非常に詳細に質問しましたこちらメーリング リストでこの質問が静かになったため、ここで抜粋しましたmaven-users。) (単なる初心者の質問ではありません)

参照

私の参考資料はhttp://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management; これが古くなったり間違っていたりする場合は、このディスカッションでお知らせください。

質問

その文書には、「2 番目で、非常に重要な...」で始まるセクションがあります。以下では、そのセクションのプロジェクトAとを参照しB、抜粋します。

そのセクションでは、プロジェクトに、アーティファクト をスコープ として定義するセクションAがあることがわかります。<dependencyManagement>ccompile

<!-- 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.xmlprojectの が表示されます。また、アーティファクト への依存関係によって のスコープがではなくにオーバーライドされることにも注意してください。BAdependencyManagementcversionccruntimecompile

<!-- 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成果物のバージョンに依存します。cruntimecompile

あれは正しいですか?私のmaven-ear-pluginバグこれは予想される動作であるという事実に基づいています。これは、ファイルをmaven-ear-pluginビルドするときに発生する動作ではありません.ear

次に、もしそれが正しいなら、アーティファクトにc推移的な依存関係があれば、それらはのクラスパスruntimeで利用可能になるはずです(Bruntimehttp://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-leafmear-143-middleruntimetestdependencyManagementmear-143

にはmear-143-earmear-143-leafが含まれる推移的にここでは、oftestで定義されたスコープが継承されたスコープよりも優先されます。dependencyManagementmear-143runtime

これは、あなたが上で参照したセクションの 2 番目の箇条書きで指定されている内容と一致していると思います。ここでそれを引用し、関連部分を太字と斜体で強調します。

bはBの親の依存関係管理セクションで定義されており、推移的な依存関係の場合、依存関係管理は依存関係仲介よりも優先されます。、バージョン1.0は、aまたはcのpomで参照される場合に選択されます。bにもコンパイルスコープがあります。

おすすめ記事