Плагин Maven Enforcer выявляет проблему конвергенции зависимостей в Camel-CXF
Плагин 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 ответа
В конце я добавил исключения к конкретным подчиненным зависимостям, которые использовались в старых, конфликтующих версиях 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>
Таким образом, я по-прежнему могу запустить плагин принудительного применения для остальной части проекта и завершить сборку, если обнаружены новые проблемы сходимости.
Я думаю, что вы не хотите, чтобы 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.xx