ライブラリ A の親 pom でバージョン 4.3 を定義しましたが、子 pom で指定されたプロジェクト モジュールでは、 A のバージョン 2.5 が必要です。私が直面している問題は、両方のバージョンが保持されているため、競合が発生していることです。
問題の解決方法を教えてください。
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
依存関係の仲介 - これにより、アーティファクトの複数のバージョンが検出されたときに使用される依存関係のバージョンが決定されます。現在、Maven 2.0 は「最も近い定義」の使用のみをサポートしています。これは、依存関係のツリーでプロジェクトに最も近い依存関係のバージョンを使用することを意味します。プロジェクトの POM で明示的に宣言することにより、常にバージョンを保証できます。依存関係ツリーで 2 つの依存関係バージョンが同じ深さにある場合、Maven 2.0.8 まではどちらが優先されるかは定義されていませんでしたが、Maven 2.0.9 以降では宣言内の順序が重要であることに注意してください。つまり、最初の宣言が優先されます。
- 「最も近い定義」は、使用されるバージョンが依存関係のツリーでプロジェクトに最も近いものになることを意味します。A、B、および C の依存関係が A -> B -> C -> D 2.0 および A -> E -> D 1.0 として定義されている場合、A を構築するときに D 1.0 が使用されます。 Eは短いです。A で D 2.0 への依存関係を明示的に追加して、D 2.0 の使用を強制することができます。
バージョン 2.5 が別の依存関係によって推移的に含まれているようです。これにより、バージョン 4.3 と 2.5 の両方が同じ長さになります。
プロジェクトで A 2.5 の依存関係を明示的に定義すると、それが最も近くなり、他のバージョンをオーバーライドします。
一般に、クラスパスには一度に 1 つのバージョンの依存関係のみを含めることをお勧めします。このようにすることで、実行時に使用されるクラスのバージョンを正確に知ることができます。
バージョンの競合を避けるために、次のように依存関係を指定してみてください。
<dependency>
<groupId>commons-daemon</groupId>
<artifactId>commons-daemon</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>some_group</groupId>
<artifactId>some_artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
バージョン 2.5 で競合するアーティファクトのgroupId
とを指定する必要がある場所。artifactId