简体   繁体   中英

How to get a Maven Dependency Convergence Report for “conflicts” between Dependency Management and transitive Dependencies?

I search for a way to have a kind of dependency convergence report that list the dependencies that are defined in the dependency-management but are referenced by a transitive dependency with a different version.

I know maven-project-info-reports-plugin:dependency-convergence , but this list only the conflicts between dependencies defined in dependency (and the transitive dependency), but as soon as I define that dependency in dependency-management , it gets not listed in the report.

I just want to have a report, I do not want to fail the build if such a "conflict" occurs.


Background:

I have a Maven-Multi-Module project:

  • formerly I have not used depencency-managent , but I used properties to define the dependency versions in the parent pom and declared the dependency in the dependency section of each module, with that property.
  • But then I thought, lets follow Maven best practice and declare the dependencies and there version in parent depencency-managent and remove the version-tag from the child project depencency s.

(formerly) I used the maven-project-info-reports-plugin:dependency-convergence report to spot the transitive dependencies with a version conflict. In order to decide that I can "ignore" that conflict or I have to do something to solve it. (Typical I "ignored" the conflicts at bugfix-level (version number delta 0.0.X), but spend more time on conflicts at major- or minor-change level.

But after I moved the dependencies to depencency-managent , the maven-project-info-reports-plugin:dependency-convergence report is almost empty and does not spot any problems.

How about Maven Enforcer Plugin with Extra Enforcer Rules?

Let us create a little conflict between the Selenium version as managed by us and the one used by 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>

The report looks like this (you have to learn to read it):

[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
]

I hope this helps and serves your purpose.

Caveat: I found this strange little glitch which can occur under certain circumstances. But let it not trouble you too much, basically it works nicely.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM