Как заставить Maven завершать работу с ошибкой, когда ссылаются на конфликтующие версии одного и того же артефакта? - PullRequest
22 голосов
/ 29 июля 2010

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

Ответы [ 4 ]

17 голосов
/ 14 февраля 2011

Плагин maven-forcecer имеет правило 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
3 голосов
/ 30 июля 2010

Плагин Maven Dependency будет включать в себя новую 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 ), и будет увеличено до error в 3.1 (см. MNG-4622 ).

1 голос
/ 16 августа 2015

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

Источник: 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>
1 голос
/ 29 июля 2010

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

См.

http://maven.apache.org/plugins/maven-dependency-plugin/examples/failing-the-build-on-dependency-analysis-warnings.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...