34

免責事項

(私はもともとここで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)プロジェクトから継承し(したがってそのセクションを継承し)、(b)アーティファクトへの依存関係を確立するpom.xmlforプロジェクトが表示されます。そのを指定する必要はありません。また、アーティファクトへの依存は、ではなく、のスコープをオーバーライドすることに気付くでしょう。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.0cruntimecompile

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

次に、それが正しければ、アーティファクトcに推移runtime的な依存関係がある場合、それらはBのクラスパスで利用可能になることも期待します( http://maven.apache.org/guides/introduction/introduction-runtimeのやや不可解な表で定義されています) 。 to-dependency-mechanism.html#Dependency_Scope)。

あれは正しいですか?

4

1 に答える 1

26

上記のバグリンク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

依存関係が明示的に定義されているinの依存関係scopeは、実際には、親pomのセクションで定義されているスコープをオーバーライドします。mear-143-leafmear-143-middleruntimetestdependencyManagementmear-143

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

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

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

于 2011-09-29T12:52:03.133 に答える