ここで解決しようとしている依存関係の地獄の状況が少しあります。A、B、C の 3 つのプロジェクトがあります。A と B は両方とも C に依存しています。今、A は私が直接制御できる私自身のモジュールです。 B は私が使用しているライブラリで、C はモジュール A から直接使用されるライブラリと、依存関係 B によって使用されるライブラリです。
これを視覚化するには:
C
^
/ B
| ^
\ /
A
さまざまな理由から、ローカルで必要な C に小さな変更を加える必要がありましたが、C が通常ダウンロードされるグローバル リポジトリにはデプロイしたくない (またはデプロイできない) 必要があります。
ローカル リポジトリにインストールされている C の修正バージョンに分類子をタグ付けし、A の POM で依存関係を変更して、次のような分類子を含めることで、これを実行しようとしました。
<dependency>
<groupId>foo</groupId>
<artifactId>C</artifactId>
<version>0.7.16</version>
<classifier>myclassifier</classifier>
</dependency>
しかしmvn dependency:tree
、推移的な依存関係のために、クラスパスに分類子を含むバージョンと分類子を含まないバージョンの両方があることがわかります。
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ A ---
[INFO] org.example:A:jar:0.1-SNAPSHOT
...
[INFO] +- foo:C:jar:myclassifier:0.7.16:compile
[INFO] +- bar:B:jar:3.2.5:compile
[INFO] | +- foo:C:jar:0.7.16:compile
このコンテキストで自分のプロジェクト/mavenに変更したバージョンを強制的に使用させる方法はありますか?
編集:解決策
今のところ、Filipe と Samuel の回答のおかげで、A の pom.xml でこのような除外を使用して解決しました。
<dependency>
<groupId>foo</groupId>
<artifactId>C</artifactId>
<version>0.7.16</version>
<classifier>myclassifier</classifier>
</dependency>
<dependency>
<groupId>bar</groupId>
<artifactId>B</artifactId>
<version>3.2.5</version>
<exclusions>
<exclusion>
<groupId>foo</groupId>
<artifactId>C</artifactId>
</exclusion>
<exclusions>
</dependency>
注:これはもちろん、C での編集が非常にマイナーであり、B で使用される API を変更しない場合にのみ機能します。これは私の場合です。