2017-02-22 5 views
3

Я ищу способ получения отчета о конвергенции зависимости, который перечисляет зависимости, которые определены в dependency-management, но на них ссылается транзитивная зависимость с другой версией.Как получить отчет о конвергенции зависимостей Maven для «конфликтов» между Управлением зависимостями и переходными зависимостями?

Я знаю maven-project-info-reports-plugin:dependency-convergence, но этот список только конфликты между зависимостями, определенными в dependency (и переходная зависимость), но как только я определить, что зависимость в dependency-management, он получает не перечислены в докладе.

Я просто хочу иметь отчет, я не хочу отказываться от сборки, если такой конфликт возникает.


фон:

У меня есть проект с Maven-Multi-Module:

  • ранее я не использовал depencency-managent, но я использовал свойство для определения версии зависимостей в родительском pom и объявили зависимость в разделе dependency каждого модуля с этим свойством.
  • Но потом я подумал, позволяет следовать лучшей практике Maven и объявлять зависимости и там версия в родительском depencency-managent и удалять тег версии из дочернего проекта depencency s.

(ранее) Я использовал отчет maven-project-info-reports-plugin:dependency-convergence, чтобы определить транзитивные зависимости с конфликтом версии. Чтобы решить, что я могу «игнорировать» этот конфликт, или я должен что-то сделать для его решения. (Обычно I «игнорировал» конфликты на уровне исправления (номер версии delta 0.0.X), но тратил больше времени на конфликты на уровне основного или второстепенного изменения.

Но после того, как я переместил зависимости на depencency-managent, maven-project-info-reports-plugin:dependency-convergence отчет почти пустой и не заметить каких-либо проблем.

+0

Это интересно. Какой вывод вы хотите извлечь из этого? –

+0

@JFMeier: Я добавил раздел «Предыстория» на мой вопрос, надеюсь, мы объясним, что я использую/хочу использовать отчет. – Ralph

ответ

4

Как насчет Maven исполнения плагин с дополнительными правилами Enforcer?

Давайте создадим небольшой конфликт между версией Селен, как управляется нами и той, которая используется 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-Site-Report https://maven.apache.org/plugins/maven-site-plugin/examples/configuring-reports.html - например, этот: https: // maven ,apache.org/plugins/maven-site-plugin/dependency-convergence.html – Ralph

Смежные вопросы