2017-02-22 101 views
3

我搜索一種方式來獲得一種依賴關係收斂報告,該報告列出了在dependency-management中定義的依賴關係,但被不同版本的傳遞依賴關係引用。如何獲得依賴管理和傳遞依賴之間「衝突」的Maven依賴關係收斂報告?

我知道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報告來發現版本衝突的傳遞依賴關係。爲了決定我可以「忽略」那個衝突,或者我必須做些事情來解決它。 (典型的我「忽略」bugfix級別的衝突(版本號delta 0.0.X),但花費更多時間在主要或次要更改級別的衝突上。

但是在將依賴關係移動到depencency-managent之後, maven-project-info-reports-plugin:dependency-convergence報告幾乎是空的,沒有發現任何問題。

+0

這很有趣。你想從中得出什麼結論? –

+0

@JFMeier:我在我的問題中添加了一個「背景」部分,希望能解釋我使用/想要使用報告的內容。 – Ralph

回答

4

如何Maven的強制實施插件與額外強制實施規則?

讓我們創建硒版本之間的小衝突由我們和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這可能發生在某些情況下。但是,讓它不會太麻煩,基本上它很好地工作。

+0

它不是一個報告,但目前這是迄今爲止最好的解決方案。 – Ralph

+0

感謝您的反饋。如果這不是一個報告,是什麼給你做報告? HTML?我不確定你的意思。 – kriegaex

+0

對於術語「報告」,我的意思是一個Maven站點報告https://maven.apache.org/plugins/maven-site-plugin/examples/configuring-reports.html - 例如這一個:https:// maven 。apache.org/plugins/maven-site-plugin/dependency-convergence.html – Ralph