8

假设我有一个具有很多依赖项的复杂项目。依赖项的版本由许多导入范围 pom 管理。我的项目依赖于 artifact group:artifact,它依赖于 artifact group:transitive-dependency。当我跑步时,dependency:tree我看到这样的东西:

+- group:artifact:jar:1.3
   +- group:transitive-dependency:jar:1.1 (version managed from 1.3)

问题是group:artifact:1.3需要group:transitive-dependency1.3 或更高版本。当然,其中一个导入 pom 正在强制使用错误的版本。但是除了搜索所有这些之外,还有什么方法可以知道是哪一个?

4

2 回答 2

6

您应该尝试使用 maven-enforcer-plugin 并将其配置为执行 DependencyConvergence,例如

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <id>enforce</id>
        <configuration>
          <rules>
            <DependencyConvergence/>
          </rules>
        </configuration>
        <goals>
          <goal>enforce</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

这将向您显示哪些顶级依赖项在其依赖项树中具有不同版本的其他依赖项。然后,您可以使用排除项来抑制您不想要的依赖项变体。

于 2013-05-18T05:25:33.720 回答
2

当 2 个或更多父 Pom 与同一个工件发生冲突时,就会发生这种情况。

例如:

[INFO] |  \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile
[INFO] |     +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile (version managed from 2.2)
[INFO] |     +- oro:oro:jar:2.0.8:compile

就我而言,framework-core 提到了 log4jextentsions 2.2。我的超级 pom 说 log4jextentsions 2.3。不知何故,框架核心说服 maven 使用 log4jextentsions 2.2。

后来当我更新 framework-core pom 以使用 2.3 时:

[INFO] |  \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile
[INFO] |     +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile
[INFO] |     +- oro:oro:jar:2.0.8:compile
于 2014-02-04T09:39:10.083 回答