java存在多个版本_java – 为什么Maven包含相同依赖的多个版本?

Maven不会以这种方式工作.

具有相同artifactId和groupId但具有不同版本的多个依赖项的解析将导致单个依赖项(所使用的版本不是确定性的).

具有相同artifactId和groupId但在WAR的同一lib文件夹中具有两个不同版本的两个工件的存在可能与以下之一相关:

>你不执行mvn clean包但只执行mvn包.

>您使用Maven war插件的错误版本.尝试更新它以检查.

>您有一个Maven插件,可以在组件构建期间将Wicket jar 6.18.0复制到目标文件夹的WEB-INF / lib文件夹中.

>您正在构建的maven WAR项目具有WAR类型的工件作为依赖项.在这种情况下,WAR依赖关系的依赖关系在您正在构建的WAR项目中是overlaid.

由于WAR依赖性,有关重复JAR的一个有趣的Maven问题:

Your answer和comment表明实际上你的构建中有一个WAR依赖项.

不幸的是,没有一个好的和长期有效的解决方案来绕过这个限制.

正如我在评论中所说,使用maven war插件的packagingExcludes属性是实际问题的有效解决方法:

org.apache.maven.plugins

maven-war-plugin

2.4

WEB-INF/lib/wicket-*-6.18.0.jar

但要注意,使用它会使你的构建在整个时间内不那么健壮.

在您更新WAR依赖项版本的那一天,以及在新版本中,它再次提取不同版本的wicket,您仍然有可能在构建的WAR中具有两个不同版本的重复jar.

通过指定maven-war-plugin的overlay元素来使用the overlay功能通常更好,因为它侧重于应用于战争依赖的叠加.它很早就解决了这个问题.

因此,您可以定义从WAR依赖项中排除任何wicket JAR:

org.apache.maven.plugins

2.4

maven-war-plugin

com.whatever.youlike

myArtifact

WEB-INF/lib/wicket-*.jar

这种方式更好,但这仍然是一种解决方法.

更新依赖关系WAR的那一天,它提取了在实际构建中声明但具有不同版本的新依赖项(Wicket除外),您可能会遇到同样的问题.

我认为只应该在我们没有选择的情况下声明对WAR工件的依赖.由于poms和项目重构是可能的,因此引入两个WAR所依赖的公共JAR依赖关系并且仅包含两个WAR的公共源和资源使事情变得更简单.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值