以下の親と子のpomがあり、lib1
とlib2
には両方ともクラスfoo.bar.Test
が含まれています。Mavenは親から継承した推移的な依存関係をどのように扱いますか?
親ポンポン
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>foo-parent</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>my.transitive</groupId>
<artifactId>lib1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
子ポンポン
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>foo-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>foo-child</artifactId>
<dependencies>
<dependency>
<groupId>my.transitive</groupId>
<artifactId>lib2</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
私はmyApp
で依存関係としてfoo-child
を含めるとfoo.bar.Test
をインスタンス化した場合、クラスのバージョンに解決Mavenのでしょうか?なぜ?
私のアプリのポンポン
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>myApp</artifactId>
<groupId>myApp</groupId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>foo</groupId>
<artifactId>foo-child</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
クラスパスをあまり冗長に定義したくない場合は、 'mvn dependency:list'や' mvn dependency:build-classpath'を使うこともできます。一般的に、Mavenはここで説明する「最も近い定義」戦略を使用します:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies – Daniel