Как сломать сборку maven при конфликте зависимостей? - PullRequest
17 голосов
/ 22 декабря 2010

Я запустил mvn dependency: дерево для проекта и увидел вывод, подобный следующему:

[INFO] my:project:jar:1.0.0-SNAPSHOT
[INFO] +- some.other:library:jar:2.0.0:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.0:compile
[INFO] |  \- (org.slf4j:slf4j-api:jar:1.6.0:compile - omitted for conflict with 1.6.1)

Это плохое состояние, потому что мой проект напрямую зависит от slf4j 1.6.0 и некоторой библиотекичто мы зависим от транзитивно зависит от slf4j 1.6.1.Эти две версии совместимы в двоичном формате, поэтому сборка проходит без каких-либо предупреждений. Есть ли способ заставить Maven быть более строгим в отношении разрешения зависимостей , чтобы я мог сконфигурировать новую сборку, которая не будет работать в этом сценарии?В этом случае решением было бы просто обновить нашу зависимость до более новой версии slf4j.

Ответы [ 2 ]

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

Плагин maven-inspecer-plugin имеет конфигурацию dependencyConvergence , которая делает то, что я хочу.По совпадению, пример из документации использует slf4j.

Настройте его следующим образом:

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

Эта комбинация зависимостей приведет к сбою сборки:

  <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
7 голосов
/ 23 декабря 2010

Хоть и устарел, я думаю это ТАКОЕ обсуждение связано.

...