Maven选择错误的重复依赖

时间:2014-04-23 08:55:53

标签: java maven dependencies duplicates

Project依赖于google Guava库,但在maven项目中有一个google-collections(版本1.0)。

Maven如何选择在编译时使用的库?

3 个答案:

答案 0 :(得分:1)

由于这两个工件具有不同的组和工件ID,因此Maven不会将它们视为重复项,并且将在构建中包含这两个工件。这意味着在引用类(例如com.google.commons.base)时使用的类定义将由类路径顺序确定。

Maven classpath ordering is deterministic,所以将您希望使用的库(可能是Guava)放在您的pom中,这将是您使用的库。 (为了确认这一点,View a dependency tree in Maven?

将工件与重复的类混合通常不是一个好主意。如果可以,请对番石榴进行标准化。

答案 1 :(得分:0)

来自official documentation

  

[...]自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的依赖关系,并排除了不需要的子依赖关系。 像魅力一样工作。