有没有一种简单的方法可以从maven pom.xml中删除未使用的依赖项?

时间:2009-10-04 22:47:56

标签: maven maven-2

我有一个包含大量模块和pom.xmls的大型Maven项目。而且项目已经改变了很多,我确信pom必须有一些不必要的依赖。有没有人知道是否有一个命令可以运行从pom中删除任何无意义的依赖项?

6 个答案:

答案 0 :(得分:189)

Maven Dependency Plugin会有所帮助,特别是dependency:analyze目标:

  

dependency:analyze分析该项目的依赖关系,并确定哪些是:使用和声明的;使用和未声明;未使用和声明。

可能有助于进行清理的另一件事是来自Dependency Convergence reportMaven Project Info Reports Plugin

答案 1 :(得分:37)

正如其他人所说,您可以使用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>

答案 2 :(得分:31)

你看过Maven Dependency Plugin了吗?这不会删除你的东西,但有工具,让你自己做分析。我特别想到

mvn dependency:tree

答案 3 :(得分:26)

您可以使用dependency:analyze -DignoreNonCompile

这将打印used undeclaredunused declared个依赖关系列表(同时忽略未使用的runtime / provided / test / system范围依赖性分析。)

小心使用此功能时,runtime使用的某些库被视为未使用!

答案 4 :(得分:14)

我有类似的问题,并决定编写一个删除依赖项的脚本。使用它我相当容易地获得了超过一半的依赖。

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

答案 5 :(得分:1)

如果你使用的是eclipse,在Maven Dependencies中的jar上右键: 选择 Maven -> 排除 Maven Artifact...