2010-12-22 32 views
17

Ben mvn bağımlılığı ran projemin slf4j 1.6.0 doğrudan bağlıdır ve bu nedenleBir bağımlılık çakışması olduğunda bir maven yapısını nasıl kırılır? Bir proje için ağaç ve aşağıdaki gibi çıktı gördü:

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

Bu olmak kötü bir durumdur bağımlı olduğumuz bazı kütüphane geçişte slf4j 1.6.1 bağlıdır. Bu iki sürüm ikili olarak uyumlu olur, bu nedenle yapı herhangi bir uyarı olmadan geçer. Maven'in bağımlılık çözünürlüğü konusunda daha katı olmasını sağlamanın bir yolu var, böylece bu senaryoda başarısız olacak yeni bir yapıyı yapılandırabilir miyim? Bu durumda çözüm, slf4j'nin daha yeni sürümüne olan bağımlılığımızı güncellemek olurdu.

cevap

22

Maven-güçlendirici eklentisi, istediğimi yapan bir dependencyConvergence yapılandırmasına sahiptir. Tesadüfen, belgelere örnek slf4j kullanır. Böyle

yapılandır it: bağımlılıkları bu kombinasyonu bir yapı başarısız olmasına neden olacaktır

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

:

[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 
: Bununla

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

derleme sırasında günlüğe