【问题标题】:Dependencies version conflict maven依赖版本冲突maven
【发布时间】:2012-12-06 17:33:36
【问题描述】:

有两个项目:
一个----有一个lib commons vers。 1.3.7 ---(取决于 B)
B ----有lib commons vers。 1.2.5

所以,我们正在构建项目 B,lib commons vers。 1.2.5 将被包含并安装在本地存储库中,然后... 如果我们执行 A 的构建(这取决于 B),Maven 决定 lib commons vers。必须包括 1.3.7,因为 lib 距离树根的距离最小... 我知道如果我们将工件的版本设置为:1.2.5 - 那是推荐的版本。但是如果我们把它放在 [] - 这是一个硬性要求,maven 应该应用另一种策略来解决版本冲突 - 包括该工件的推荐版本。但是当我尝试这样做时,它不起作用,因为 Maven 从 loc 存储库中获取工件,其中包含对 lib commons vers 的引用。清单文件中的 1.2.5,但包含的 lib - commons vers。 1.3.7。你能告诉我如何解决这个问题,或者列表中可能有一些工具或 maven 插件可以告诉你这样的冲突。

【问题讨论】:

    标签: java maven maven-2 dependency-management


    【解决方案1】:

    您需要对依赖项使用排除项。类似的东西(它只是一个示例):

    <dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-amqp</artifactId>
    <version>2.1.0.RELEASE</version>
    <exclusions>
        <exclusion>
            <artifactId>spring-beans</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
    </dependency>
    

    如果您使用的是 Eclipse 并且不想手动操作,您可以通过打开一个 pom 文件并选择一个“依赖层次结构”选项卡来完成,在该选项卡下您可以看到所有依赖关系层次结构。然后您可以右键单击要排除的依赖项,然后单击“排除 Maven Artifact”

    【讨论】:

    • @jonasas,你的意思是在项目A的构建过程中,项目B将不包含公共库?但这不是解决办法。实际上项目A对项目B一无所知,maven只是为B.jar提供了commons vers。 1.2.5 在 MANIFEST 文件中,但由于“最近的胜利”策略 Maven 决定 lib commons vers。 1.3.7 应包括在内。这就是问题
    • 如果不想使用1.3.7版本,又想使用依赖项目的版本(1.2.5)的库,不能直接从项目A中去掉直接依赖有吗?
    【解决方案2】:

    你需要运行mvn dependency:tree

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 2013-06-24
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多