我用m2e插件在eclipse中有一个maven项目。依赖层次结构显示它正在省略spring 3.2.3而不是3.0.0.RELEASE,如下所示。怎么办呢?它不应该省略旧版本并保留最新版本吗?
答案 0 :(得分: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
下定义的版本。
有关详情,请参阅我的博客:how maven resolves dependency conflicts