Подтвердить что ты не робот

Как мне заставить Maven терпеть неудачу, если ссылаются конфликтующие версии одного и того же артефакта?

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

4b9b3361

Ответ 1

У maven-enforcer-плагина есть правило dependencyConvergence, которое делает то, что вы хотите. Вот пример из документации.

Это приведет к сбою сборки:

  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-nop</artifactId>
      <version>1.6.0</version>
    </dependency>
  </dependencies>  

С этим записывается во время компиляции:

[ERROR]
Dependency convergence error for org.slf4j:slf4j-api:1.6.1 paths to dependency are:
+-org.myorg:my-project:1.0.0-SNAPSHOT
  +-org.slf4j:slf4j-jdk14:1.6.1
    +-org.slf4j:slf4j-api:1.6.1
and
+-org.myorg:my-project:1.0.0-SNAPSHOT
  +-org.slf4j:slf4j-nop:1.6.0
    +-org.slf4j:slf4j-api:1.6.0

Ответ 2

Maven Dependency Plugin будет включать новый dependency:analyze-duplicate в своей версии 2.2, и это ИМХО, ближайшая вещь, которую вы можете получить без конкретных (это не приведет к сбою сборки, но отобразит дубликаты зависимостей).

Эта цель была добавлена ​​для MDEP-206 (добавьте новый Mojo, чтобы найти объявленную декларацию), которая исправлена, но версия 2.2 еще не выпущен, поэтому, если вы хотите использовать эту функцию, вам нужно будет построить SNAPSHOT из исходного дерева:

https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-dependency-plugin/

Если вы действительно хотите скомпилировать сборку в случае дублирования, напишите свой собственный mojo (добавьте выше) или подайте RFE плагина зависимостей Maven.

В качестве побочного примечания Maven 3 делает Throw [a] Ошибка проверки, если pom содержит зависимость с двумя разными версиями из коробки. Чтобы быть полностью точным, это будет сообщено как предупреждение в Maven 3.0, чтобы не нарушить существующие сборки Maven 2.x(см. MNG-4005) и будет увеличена до ошибки в 3.1 (см. MNG-4622).

Ответ 4

Добавьте следующий плагин:

Источник: http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <executions>
        <execution>
            <configuration>
                <rules>
                    <dependencyConvergence/>
                </rules>
            </configuration>
            <goals>
                <goal>enforce</goal>
            </goals>
        </execution>
    </executions>
</plugin>