0

我在 Eclipse 中有一个带有 m2e 插件的 Maven 项目。依赖层次结构显示它省略了 spring 3.2.3 代替 3.0.0.RELEASE ,如下所示。不然怎么办?它不应该省略旧版本并保持最新吗?

在此处输入图像描述

4

1 回答 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 回答