解决重复版本的依赖项

时间:2017-01-17 14:56:47

标签: java maven duplicates dependencies

这非常烦人。我有2个项目,项目ABB依赖于A作为JAR文件。因此,A中的第3个库X依赖于另一个第三方库Y,问题是maven将项目Y中的A解析为版本,但是在项目中{ {1}}到另一个版本,如下所示:

B

以下版本在项目commons-beanutils:jar:1.9.2 vs. commons-beanutils:jar:1.8.0 中指定:

A

在项目net.sf.json-lib:json-lib:jar:jdk15:2.4 的POM.xml中,实际上并没有明确指定的依赖项版本。

在项目B中:

A

项目[INFO] +- net.sf.json-lib:json-lib:jar:jdk15:2.4:compile [INFO] | +- commons-beanutils:commons-beanutils:jar:1.9.2:compile [INFO] | +- commons-collections:commons-collections:jar:3.2.1:compile [INFO] | \- net.sf.ezmorph:ezmorph:jar:1.0.6:compile 仅因B而引入Y的依赖关系:

A

理想的解决方案是只对项目[INFO] +- A.jar [INFO] | +- net.sf.json-lib:json-lib:jar:jdk15:2.4:compile [INFO] | | +- commons-beanutils:commons-beanutils:jar:1.8.0:compile [INFO] | | +- commons-collections:commons-collections:jar:3.2.1:compile [INFO] | | \- net.sf.ezmorph:ezmorph:jar:1.0.6:compile 中的pom.xml进行更改,以解决重复版本依赖地狱问题。任何的想法?谢谢!

是否可以使项目B继承B的依赖关系,而不是引入自己的依赖关系。

修改

最后我发现了一些有用的东西,所以我只是把它放在这里,万一有人可能会在以后遇到同样的问题。

关键是将项目A中的依赖项放入排除项中,因此maven不会只使用项目A中定义的库版本,而是根据当前上下文编制一个版本。以下是示例:

A.jar

1 个答案:

答案 0 :(得分:1)

让我把要点放在答案中。

B是一场战争,依赖于jar A.所以它继承了A的所有传递依赖。

net.sf.json-lib:json-lib:jar:jdk15:2.4:compile实际上依赖于commons-beanutils:commons-beanutils:jar:1.8.0:compile(我查了一下)。因此,您的项目B正确地解决了这种依赖关系(并将其置于战争中)。

项目A的树显示了commons-beanutils对版本1.9.2的依赖性。此版本号必须来自项目A内的其他位置。它可能是dependencyManagement,它可能是其他一些依赖项。追踪版本1.9.2的来源,你知道更多。

在任何情况下,战争只包含版本1.8.0而不是1.9.2,因为在一场战争中你永远不会有两个具有相同groupId / artifactId的工件。

相关问题