2010-12-22 12 views
17

私はMVN依存関係を走った:プロジェクトのツリーと、私は次のような出力を見ました:依存関係の競合が発生したときにMavenビルドを中断するにはどうすればいいですか?

[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に過渡的に依存する。これらの2つのバージョンはバイナリ互換であるため、ビルドは警告なしでパスします。 このシナリオで失敗するような新しいビルドを設定できるように、Mavenに依存性の解決をより厳密にする方法がありますか??この場合の解決方法は、slf4jの新しいバージョンへの依存性を更新することだけです。

答えて

22

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

[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 
:これにより

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

は、コンパイル時にログに記録されています

関連する問題