web-dev-qa-db-ja.com

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

多数のモジュールとpom.xmlを含む大規模なMavenプロジェクトがあります。プロジェクトが大きく変わったので、pomには不必要な依存関係がいくつかあるはずです。誰もあなたがpomから無意味な依存関係を削除するために実行できるコマンドがあるかどうか知っていますか?

230
thickosticko

Maven Dependency Plugin は、特にdependency:analyzeの目標に役立ちます:

dependency:analyzeは、このプロジェクトの依存関係を分析し、次のうちどれを使用するかを決定します。使用済みおよび未宣言。未使用および宣言済み。

クリーンアップを行うのに役立つもう1つのことは、 Maven Project Info Reports Plugin からの Dependency Convergence report です。

190
Pascal Thivent

他の人が言ったように、 dependency:analyze ゴールを使用して、どの依存関係が使用され宣言されているか、使用されているか宣言されていないか、未使用で宣言されているかを見つけることができます。 dependency: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>
37
Rich Seller

Maven Dependency Plugin を見ましたか?それはあなたのためのものを削除しませんが、分析を自分で行うことができるツールがあります。私は特に考えています

mvn dependency:tree
31
Brian Agnew

dependency:analyze -DignoreNonCompile を使用できます

これにより、used undeclaredおよびunused declared依存関係のリストが出力されます(未使用の依存関係分析ではruntime/provided/test/systemスコープを無視します)。

しかし注意これを使用している間、runtimeで使用されるいくつかのライブラリは未使用と見なされます!

28
Saikat

同様の問題が発生したため、依存関係を削除するスクリプトを作成することにしました。それを使用して、依存関係の半分以上をかなり簡単に取り除いた。

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

14
user1132305