我在 Eclipse 中有一个带有 m2e 插件的 Maven 项目。依赖层次结构显示它省略了 spring 3.2.3 代替 3.0.0.RELEASE ,如下所示。不然怎么办?它不应该省略旧版本并保持最新吗?
问问题
201 次
1 回答
3
Maven 的工作原理是nearest wins strategy
同时解决依赖冲突,这意味着无论它在树中找到更接近的版本,它都会采用该版本并忽略其他版本。
在您可以运行的情况下-
mvn dependency:tree -Dverbose -Dincludes=spring-aop
您会注意到,在树层次结构中,版本 3.0.0 比版本 3.2.3 更早,所以这就是为什么它使用 3.0.0 版本来解决依赖关系。
解决方案:对于这些类型的问题,推荐的解决方案是在您的父 pom.xml 文件中进行适当的依赖管理。就像你的情况一样,你可以有这样的东西:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.3</version>
</dependency>
<dependencies>
</dependencyManagement>
现在,无论何时 Maven 尝试解析版本spring-aop
,它总是会咨询依赖管理并使用定义的版本dependencyManagement
。
有关更多信息,您可以在我的博客上参考:maven 如何解决依赖冲突
于 2013-08-02T06:30:59.123 回答