Project依赖于google Guava库,但在maven项目中有一个google-collections(版本1.0)。
Maven如何选择在编译时使用的库?
答案 0 :(得分:1)
由于这两个工件具有不同的组和工件ID,因此Maven不会将它们视为重复项,并且将在构建中包含这两个工件。这意味着在引用类(例如com.google.commons.base
)时使用的类定义将由类路径顺序确定。
Maven classpath ordering is deterministic,所以将您希望使用的库(可能是Guava)放在您的pom中,这将是您使用的库。 (为了确认这一点,View a dependency tree in Maven?)
将工件与重复的类混合通常不是一个好主意。如果可以,请对番石榴进行标准化。
答案 1 :(得分:0)
[...]自Maven 2.0.9以来,它在声明中的顺序是重要的:第一个声明获胜。
"最接近的定义" 表示所使用的版本将是依赖树中与项目最接近的版本,例如。如果A,B和C的依赖关系被定义为A - >; B - > C - > D 2.0和A - > E - > D 1.0,然后在构建A时将使用D 1.0,因为从A到D到E的路径更短。您可以在A中向D 2.0显式添加依赖项以强制使用D 2.0
另请参阅reference book,关于Conflict Resolution
。
答案 2 :(得分:0)
我找到了解决方案。
给定: 父项目A. 目前的项目B
我明确地定义了对A的依赖关系,并排除了不需要的子依赖关系。 像魅力一样工作。