【问题标题】:Tracking managed dependency versions in Maven在 Maven 中跟踪托管依赖项版本
【发布时间】:2012-12-28 10:43:20
【问题描述】:

假设我有一个包含大量依赖项的复杂项目。依赖项的版本由许多导入范围 pom 管理。我的项目依赖于工件group: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-dependency 1.3 或更高版本。当然,其中一个导入 pom 正在强制使用错误的版本。但是除了搜索所有这些之外,还有什么方法可以知道是哪一个?

【问题讨论】:

  • 您是否尝试过在您的父项目上运行mvn site 并查看dependency convergence 输出?
  • 传递依赖没有出现在依赖收敛报告中。它也没有显示管理依赖项的位置。

标签: maven dependencies pom.xml


【解决方案1】:

您应该尝试使用 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>

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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2015-10-17
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多