【发布时间】:2013-08-03 04:04:38
【问题描述】:
我在 Eclipse 中有一个带有 m2e 插件的 maven 项目。依赖层次结构显示它省略了 spring 3.2.3 代替 3.0.0.RELEASE ,如下所示。不然怎么办?不应该省略旧版本,保持最新吗?
【问题讨论】:
我在 Eclipse 中有一个带有 m2e 插件的 maven 项目。依赖层次结构显示它省略了 spring 3.2.3 代替 3.0.0.RELEASE ,如下所示。不然怎么办?不应该省略旧版本,保持最新吗?
【问题讨论】:
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
【讨论】: