私は、Maven プロジェクトの 2 つの直接依存関係に、特定の推移的依存関係の 2 つの異なるバージョンが存在するというケースを経験しました。
私の場合は、次のものに直接依存していました。
<dependency>
<groupId>org.jclouds.driver</groupId>
<artifactId>jclouds-sshj</artifactId>
<version>${jclouds.version}</version>
</dependency>
そして
<dependency>
<groupId>org.mule.modules</groupId>
<artifactId>mule-module-jersey</artifactId>
<version>${mule.version}</version>
</dependency>
これらの依存関係は両方とも、com.sun.jersey:jersey-core に (深い) 推移的な依存関係がありましたが、それぞれバージョンが異なっていました。Maven はこれに対して失敗せず、そのようなことが起きていることを警告さえしませんでした (警告したとしても、私はそれを見たことがありません)。そのため、jclouds 依存関係によってもたらされた jersey-core のバージョンによっていくつかの問題が発生したときに発生した問題をデバッグするまで、私はそれに気づきませんでした。
この種の深い推移的な依存関係のオーバーライドを検出し、そのような衝突を検出した場合に少なくともユーザーに警告する (または Maven の実行を失敗させる) Maven プラグインまたはその他のツールは存在しますか? たとえ、Maven のデフォルトの動作が、依存関係を解決するときに表示される最初のバージョンを選択するだけであったとしても?
ベストアンサー1
Dependency Enforcer プラグインを使用します。依存関係が適切に収束しない場合はビルドが停止します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>enforce</id>
<configuration>
<rules>
<DependencyConvergence />
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>