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的公共源和资源使事情变得更简单.