Плагин Maven Enforcer выявляет проблему конвергенции зависимостей в Camel-CXF - PullRequest
0 голосов
/ 09 января 2019

Плагин Maven Enforcer выявляет проблему сходимости кода в сторонней библиотеке, которую я использую. Как я могу проигнорировать это, все еще работая над модулем принудительного применения в проекте над остальной частью проекта, или как иначе я должен решить проблему, не изменяя версию библиотеки?

Мой проект потребляет camel-cxf 2.13.2, что, как выясняется, зависит от двух отдельных транзитивных версий jaxb-impl; 2.1.13 и 2.2.6. Плагин принудительного действия идентифицирует это и завершает сборку.

Вот как я настраиваю плагин:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.3.1</version>
        <configuration>
            <rules>
                <DependencyConvergence/>
            </rules>
        </configuration>
    </plugin>

Когда я бегу mvn enforcer:enforce, я получаю

Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for com.sun.xml.bind:jaxb-impl:2.2.6 paths to dependency are:
+-com.myModule:module:18.0.0-SNAPSHOT
  +-org.apache.camel:camel-cxf:2.13.2
    +-org.apache.camel:camel-core:2.13.2
      +-com.sun.xml.bind:jaxb-impl:2.2.6
and
+-com.myModule:module:18.0.0-SNAPSHOT
  +-org.apache.camel:camel-cxf:2.13.2
    +-org.apache.cxf:cxf-rt-bindings-soap:2.7.11
      +-org.apache.cxf:cxf-rt-databinding-jaxb:2.7.11
        +-com.sun.xml.bind:jaxb-impl:2.1.13
and
+-com.myModule:module:18.0.0-SNAPSHOT
  +-org.apache.cxf:cxf-rt-management:2.7.11
    +-org.apache.cxf:cxf-rt-core:2.7.11
      +-com.sun.xml.bind:jaxb-impl:2.1.13

Ответы [ 2 ]

0 голосов
/ 10 января 2019

В конце я добавил исключения к конкретным подчиненным зависимостям, которые использовались в старых, конфликтующих версиях jaxb-impl.

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-core</artifactId>
    <version>${cxf.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
    </exclusions>
    <scope>${framework.scope}</scope>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-databinding-jaxb</artifactId>
    <version>${cxf.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Таким образом, я по-прежнему могу запустить плагин принудительного применения в остальной части проекта и завершить сборку, если обнаружены новые проблемы сходимости.

0 голосов
/ 09 января 2019

Я думаю, вы не хотите, чтобы maven потерпел неудачу на этапе сборки, когда есть ошибка сходимости. В этом случае вам необходимо установить флаг fail = false в конфигурации, чтобы он просто регистрировал ошибку сходимости и переходил к следующему этапу.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>3.0.0-M1</version>
  <executions>
    <execution>
      <id>dependency-convergence</id>
      <phase>install</phase>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <DependencyConvergence />
        </rules>
        <fail>false</fail>
      </configuration>
    </execution>
    <executions>
      <plugin>

Примечание: версия 1.3.1 maven -forcer-plugin очень старая. рассмотрите возможность обновления до последней версии 3.x.x.

...