java - 如何在依赖管理和传递依赖之间获取 "conflicts"的 Maven 依赖收敛报告?

标签 java maven dependency-management

我正在寻找一种方法来获得一种依赖收敛报告,该报告列出了在 dependency-management 中定义但被不同版本的传递依赖引用的依赖。

我知道maven-project-info-reports-plugin:dependency-convergence ,但此列表仅列出了 dependency 中定义的依赖项(和传递依赖项)之间的冲突,但是一旦我在 dependency-management 中定义了该依赖项,它就不会列出在报告中。

我只想得到一份报告,如果发生这样的“冲突”,我不想让构建失败。


背景:

我有一个 Maven 多模块项目:

  • 以前我没有使用过depencency-managent,但是我使用属性在父pom中定义依赖版本,并在每个模块的dependency部分声明依赖,具有该属性。
  • 但后来我想,让我们遵循 Maven 最佳实践并在父项目 depencency-managent 中声明依赖项和版本,并从子项目 depencency 中删除版本标签s.

(以前)我使用 maven-project-info-reports-plugin:dependency-convergence 报告来发现具有版本冲突的传递依赖项。为了决定我可以“忽略”那个冲突,或者我必须做些什么来解决它。 (通常我“忽略”错误修复级别(版本号增量 0.0.X)的冲突,但花更多时间在主要或次要更改级别的冲突上。

但是在我将依赖项移动到 depencency-managent 之后,maven-project-info-reports-plugin:dependency-convergence 报告几乎是空的并且没有发现任何问题。

最佳答案

带有额外 Enforcer 规则的 Maven Enforcer 插件怎么样?

让我们在我们管理的 Selenium 版本和 PhantomJS 使用的版本之间制造一点冲突:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>de.scrum-master.stackoverflow</groupId>
  <artifactId>dependency-convergence</artifactId>
  <version>1.0-SNAPSHOT</version>

  <build>
    <plugins>
      <!-- Enforce important build rules -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version>
        <executions>
          <execution>
            <id>enforcer-rules-error</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <fail>false</fail>
              <skip>false</skip>
              <rules>
                <requireMavenVersion>
                  <version>3.2.5</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>enforcer-rules-warning</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <fail>false</fail>
              <skip>false</skip>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>extra-enforcer-rules</artifactId>
            <version>1.0-beta-6</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.codeborne</groupId>
        <artifactId>phantomjsdriver</artifactId>
        <version>1.3.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.0.1</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>com.codeborne</groupId>
      <artifactId>phantomjsdriver</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

报告看起来像这样(你必须学会​​阅读它):

[WARNING] 
Dependency convergence error for commons-codec:commons-codec:1.9 paths to dependency are:
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-remote-driver:2.53.0
      +-org.apache.httpcomponents:httpclient:4.5.1
        +-commons-codec:commons-codec:1.9
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-net.sourceforge.htmlunit:htmlunit:2.23
        +-commons-codec:commons-codec:1.10

[WARNING] 
Dependency convergence error for org.apache.httpcomponents:httpclient:4.5.1 paths to dependency are:
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-remote-driver:2.53.0
      +-org.apache.httpcomponents:httpclient:4.5.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-net.sourceforge.htmlunit:htmlunit:2.23
        +-org.apache.httpcomponents:httpclient:4.5.2
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-net.sourceforge.htmlunit:htmlunit:2.23
        +-org.apache.httpcomponents:httpmime:4.5.2
          +-org.apache.httpcomponents:httpclient:4.5.2

[WARNING] 
Dependency convergence error for org.seleniumhq.selenium:selenium-remote-driver:2.53.0 paths to dependency are:
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-remote-driver:2.53.0
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-chrome-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-edge-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-firefox-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-ie-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-opera-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-safari-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-support:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for commons-codec:commons-codec:1.9 paths to dependency are:
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-remote-driver:2.53.0
      +-org.apache.httpcomponents:httpclient:4.5.1
        +-commons-codec:commons-codec:1.9
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-net.sourceforge.htmlunit:htmlunit:2.23
        +-commons-codec:commons-codec:1.10
, 
Dependency convergence error for org.apache.httpcomponents:httpclient:4.5.1 paths to dependency are:
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-remote-driver:2.53.0
      +-org.apache.httpcomponents:httpclient:4.5.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-net.sourceforge.htmlunit:htmlunit:2.23
        +-org.apache.httpcomponents:httpclient:4.5.2
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-net.sourceforge.htmlunit:htmlunit:2.23
        +-org.apache.httpcomponents:httpmime:4.5.2
          +-org.apache.httpcomponents:httpclient:4.5.2
, 
Dependency convergence error for org.seleniumhq.selenium:selenium-remote-driver:2.53.0 paths to dependency are:
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-remote-driver:2.53.0
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-chrome-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-edge-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-firefox-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-ie-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-opera-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-safari-driver:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
and
+-de.scrum-master.stackoverflow:dependency-convergence:1.0-SNAPSHOT
  +-com.codeborne:phantomjsdriver:1.3.0
    +-org.seleniumhq.selenium:selenium-java:3.0.1
      +-org.seleniumhq.selenium:selenium-support:3.0.1
        +-org.seleniumhq.selenium:selenium-remote-driver:3.0.1
]

我希望这对您有所帮助并能达到您的目的。

警告:我发现这个 strange little glitch在某些情况下可能会发生。但是不要太麻烦,基本上它很好用。

关于java - 如何在依赖管理和传递依赖之间获取 "conflicts"的 Maven 依赖收敛报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42386693/

相关文章:

java - 错误 : JAVA_HOME is not defined correctly executing maven

eclipse - 无法执行目标 org.apache.rat :apache-rat-plugin:0. 8:检查(默认)项目 giraph-gora:太多未批准的许可证:56

go - 使用 dep 运行 go vet 时找不到头文件

java - Maven:提供依赖项的多个版本

java - 如何使用 JAX-WS 将后端方法的异常消息解析为 SOAP 响应消息?

java - 具有变化对象的连续线程

java - Icefaces 和 JQuery

java - 为什么在本地 Maven 仓库上安装时分类器会从 Artifact 中删除?

java - 无法在我的 Android 应用程序中获取电话号码

node.js - 在node.js中同步加载依赖项