直到今天我确信maven正在使用最接近的依赖胜利策略,但现在我不确定。
我的项目包含以下两个依赖项:
<dependency>
<groupId>TestA</groupId>
<artifactId>TestA</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>TestB</groupId>
<artifactId>TestB</artifactId>
<version>1.0</version>
</dependency>
A
和B
的poms依赖项C
的范围为compile
因此,如果有人问我在我的应用程序中首先得到的C
的版本和范围,我想出的是依赖C
是TestA
并且会{ {1}}范围,因为两者都在相同的深度,test
首先在pom中定义。但那是错的。最后,我的应用程序将包含来自TestA
的{{1}},范围为C
。我没有找到关于范围如何被媒体化的任何信息。为什么会这样?
答案 0 :(得分:0)
在Maven构建的编译和打包阶段,没有包含测试作用域的依赖项。由于TestB依赖于TestC进行编译,因此TestC将作为传递依赖项添加到您的项目中。