2010-12-22 13 views
17

Pobiegłem mvn zależność: drzewa dla projektu i widziałem wyjścia tak:Jak złamać maven kompilacji, gdy istnieje konflikt zależności?

[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) 

to jest zły stan się w mój projekt, ponieważ zależy bezpośrednio od slf4j 1.6.0 a niektóre biblioteki, które zależą przejściowo zależy od slf4j 1.6.1. Te dwie wersje są kompatybilne z binariami, więc kompilacja przebiega bez ostrzeżeń. Czy istnieje sposób, aby zmusić Mavena do bycia bardziej rygorystycznym w kwestii rozwiązania zależności, aby móc skonfigurować nową kompilację, która zawiedzie w tym scenariuszu? W takim przypadku rozwiązaniem byłoby zaktualizowanie naszej zależności do nowszej wersji slf4j.

Odpowiedz

22

Wtyczka maven-enforcer ma konfigurację dependencyConvergence, która wykonuje to, co chcę. Przypadkowo przykład z dokumentacji używa slf4j.

skonfigurować go tak:

<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> 

Ta kombinacja zależności spowoduje nagromadzenie się niepowodzeniem:

<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> 

Dzięki temu są rejestrowane podczas kompilacji:

[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 
Powiązane problemy