Maven pom.xmlから未使用の依存関係を削除する簡単な方法はありますか?


277

多くのモジュールと多くのpom.xmlファイルを含む大規模なMavenプロジェクトがあります。プロジェクトが変更され、pomにいくつかの不要な依存関係が含まれていると思います。pomから未使用の依存関係を削除するコマンドはありますか?


2
IntelliJを使用している場合は、次を参照してください:jonnyzzz.com/blog/2013/05/13/…リンク切れの場合:Jonnyzzz Dependenciesプラグイン
Benj

3
@Benjこのjonnyzzプラグインを使用しようとしたが、役に立たなかった。ほとんどの場合、未使用の依存関係は見つかりません。また、場合によっては、build.gradleファイルからではなくクラスパスから依存関係を削除することもあります。このプラグインが実際にどのように機能するかを説明する適切なドキュメントも見つかりません。
vaibhav.g

@ vaibhav.g更新ありがとうございます。2016年以降、状況は変わったようです。
ベンジ

回答:


222

Mavenの依存関係のプラグインは、特に役立つdependency:analyze目標を:

dependency:analyzeこのプロジェクトの依存関係を分析し、次のものを決定します。使用され、宣言されていません。未使用および宣言済み。

クリーンアップに役立つもう1つのことは、Mavenプロジェクト情報レポートプラグインからの依存性収束レポートです。


5
これをEclipseでトリガーするにはどうすればよいですか?
Daniil Shevelev、2014年

134
dependency:analyzeに注意してください。実行時に使用される一部のライブラリは未使用と見なされます。
Nereis 14

27
ランタイムおよび提供された依存関係を未使用として報告しないようにするには、ignoreNonCompileオプションをtrueに設定できます。
2015年

dependency:analyzeを使用している間は注意してください。'ejpapi3'depedencyを使用していましたが、レポートはそれが「未使用で宣言されている」ことを示しました
Akhil S Kamath

分析の結果を理解するには、次の回答を参照してください。「使用されている宣言されていない依存関係は必要な依存関係ですが、プロジェクトで依存関係として明示的に宣言されていません。」- stackoverflow.com/questions/4565740/...
Janacミーナ

49

使用できます dependency:analyze -DignoreNonCompile

これにより、未使用および未使用の宣言済み依存関係のリストが出力されます(/ / /は無視されます)runtimeprovidedtestsystem未使用の依存関係の分析のためのスコープを。)

これを使用するときは注意してください。使用される一部のライブラリruntimeは未使用と見なされます!

詳細については、このリンクを参照してください


4
[プラス]ランタイムの言及に1!
gaurav 2018

1
一部のランタイムの依存関係は未使用としてクリアされていますが、実際には必要です。
Smart Coder

43

他の人が言ったように、dependency:analyzeゴールを使用して、どの依存関係が使用および宣言されているか、使用および宣言されていないか、未使用および宣言されているかを見つけることができます。依存関係を見つけることもできます:analyze-dep-mgtあなたdependencyManagementセクションの不一致を探しに役立ちます。

POMから不要な直接依存関係を削除するだけで済みますが、サードパーティのjarによって導入された場合<exclusions>は、依存関係のタグを使用してサードパーティのjarを除外できます(詳細といくつかの説明については、「依存関係の除外」というタイトルのセクションを参照してください)。 。以下は、Spring依存関係からcommons-loggingを除外する例です。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>

3
(IntelliJ)質問にコメントしたとおり、Jonnyzzzプラグインを使用しました。素敵なプラグインで、IntelliJ 2016.1.3とうまく動作します
Benj

34

Maven依存関係プラグインを見ましたか?それはあなたのためのものを削除しませんが、あなたが自分で分析を行うことを可能にするツールを持っています。私は特に考えています

mvn dependency:tree

1
優れた-感謝(私は「きれいな依存関係」を検索し、それがきれいにプラグインを投げました!!しかし、このルックスが... MVN依存性を有望なままとして、私が探していたものを見つけることができませんでした:分析)

14

似たような問題があり、依存関係を削除するスクリプトを作成することにしました。それを使用して、依存関係の半分以上をかなり簡単に取り除きました。

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html


2
このスクリプトではを使用しないことに注意してくださいmvn dependency:analyze。すべての依存関係を削除しようとし、機能するかどうかを確認しますmvn install
ダイエット2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.