2012-10-21 17 views
5

下記のMavenの依存関係の例では、slf4jの依存関係はlog4j 1.2.17を引き込みたいので、log4jの明示的な依存関係は1.2.15を取り込みたいと考えています。 Mavenはlog4jをバージョン1.2.15に解決しますが、sl4jがlog4jのそれ以降のバージョンを望むことをMavenが出力するという警告はありません。遷移依存バージョンのミスマッチについて警告するにはどうすればよいですか?

1.2.15バージョンをサイレントモードで取得するのではなく、これらのタイプの競合について警告するにはどうすればよいですか?

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.7.2</version> 
</dependency> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.15</version> 
</dependency> 

答えて

9

要するに、これを処理するにはMaven-enforcer-pluginを使用する必要があります。

documentation pageに語ったとしてあなたは、より詳細には

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

などのEnforcerプラグインを設定するには、transative依存関係の不一致があり、このようなものだけで必要があると思います:

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

は、エンフォーサルールなしでサイレントに「動作」しますが、ルールが設定されていると、

でビルドに失敗します
Dependency convergence error for org.slf4j:slf4j-api1.6.1 paths to dependency are: 

[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 

は、このように、ユーザーが失敗したビルドに関するエラーメッセージを取得するときに、彼女は

<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> 
    <exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
+0

のように、除外を行うことによってそれを修正することができ、これは、非常によく感謝を働きました。 – ams

関連する問題