1. ホーム
  2. maven-2

[解決済み] Maven: ライブラリによって追加された依存関係をオーバーライドする方法

2022-04-28 16:55:47

質問

以下は私の一般的な問題です。

私のプロジェクトPはAに依存しており、Bに依存しており、Cに依存しており、Dのバージョン1.0.1に依存しています。

Dのバージョン1.0.1に問題があり、別のモジュールを強制的に使用したいのですが、どうしたらいいですか?Dへの依存関係を直接追加していないので、私のプロジェクトのPOMでこれをどのように宣言すればよいのかわかりません。それはDへの依存を宣言したCです。

重要:この場合、バージョンだけでなく、group &アーティファクトも変更されます。つまり、単に依存関係のバージョンをオーバーライドするのではなく、あるモジュールを除外して別のモジュールをインクルードすることが重要なのです。

具体的には、DはStAXで、1.0.1では バグ . バグのメモによると、stax-api-1.0.1 (maven GroupId = stax) を stax-api-1.0-2 (maven GroupId = javax.xml.stream)" に置き換えることで問題が解決したそうなので、その通りやってみることにします。

したがって、D = stax:stax-api:jar:1.0.1 と C = org.apache.xmlbeans:xmlbeans:jar:2.3.0 となる。

一応、maven 2.0.9を使っています。

mvn dependency:tree"の出力。

mvn dependency:tree
[..snip..]
[INFO] +- org.apache.poi:poi-ooxml:jar:3.6:compile
[INFO] |  +- org.apache.poi:poi-ooxml-schemas:jar:3.6:compile
[INFO] |  |  +- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO] |  |  |  \- stax:stax-api:jar:1.0.1:compile

私のプロジェクトのPOMでは、"A"に以下のような依存関係があります。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.6</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.6</version>
</dependency>

解決方法は?

現在のpomにあるバージョンを指定するだけです。ここで指定したバージョンは、他のバージョンを上書きします。

バージョンの強制

しかし、もしその POM 自体が推移的依存関係を用いて依存している場合、下流の他の POM にも影響を与えることに注意しなければなりません。


リソース :