1. ホーム
  2. java

[解決済み] Mavenの未使用/未宣言の依存関係とは何ですか?どうすればいいの?

2023-08-29 16:55:25

質問

メイブン dependency:analyze は、私のプロジェクトの依存関係について不平を言う。どのように未使用と未宣言が判断されるのでしょうか?それらについてどうすればよいのでしょうか?

$ mvn dependency:analyze 
...
[WARNING] Used undeclared dependencies found:
[WARNING]    org.slf4j:slf4j-api:jar:1.5.0:provided
[WARNING]    commons-logging:commons-logging:jar:1.1.1:compile
[WARNING]    commons-dbutils:commons-dbutils:jar:1.1-osgi:provided
[WARNING]    org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile

...
[WARNING] Unused declared dependencies found:
[WARNING]    commons-cli:commons-cli:jar:1.0:compile
[WARNING]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING]    org.apache.httpcomponents:httpclient:jar:4.0-alpha4:compile
[WARNING]    commons-collections:commons-collections:jar:3.2:provided
[WARNING]    javax.mail:mail:jar:1.4:provided

注 これらの依存関係の多くは私のランタイムコンテナで使用されており、異なるバージョンでクラスパスに同じライブラリが2回あることを避けるために、それらを提供されるものとして宣言しました。

どのように解決するのですか?

Mavenがどのように判断しているかは不明です。これによって報告されたすべての項目に対応する必要はありませんが、この情報は適宜使用することができます。

未宣言の依存関係を使用 は、必要であるが、あなたのプロジェクトで依存関係として明示的に宣言されていないものです。しかし、あなたのプロジェクトの他の依存関係の推移的依存関係のおかげで、それらは利用可能です。 これらの依存関係を明示的に宣言するのは良いアイデアです。これにより、これらの依存関係のバージョンを制御することもできます (おそらくランタイムによって提供されるバージョンと一致させることができます)。

に関しては 未使用の宣言済み依存関係 については、削除するのがよいでしょう。 なぜ不必要な依存関係をプロジェクトに追加するのでしょうか? しかし、Transitivityは、おそらくランタイムのバージョンと競合して、これらをいずれにせよ持ち込むことができます。この場合、それらを指定する必要があります - 基本的には version .

ちなみに mvn dependency:tree 依存関係ツリー を表示します。これにより、それぞれの依存関係がプロジェクトにどのように適合するかをよりよく理解することができます。