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

251 maven-2 maven

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

Pas*_*ent 204

Maven的依赖插件会有所帮助,尤其是dependency:analyze目标:

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

可能有助于进行一些清理的另一件事是来自Maven项目信息报告插件Dependency Convergence报告.

  • 小心依赖:分析,在运行时使用的一些库被认为是未使用的. (126认同)
  • 为了防止将运行时报告和提供的依赖关系报告为未使用,可以将[`ignoreNonCompile`](https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#ignoreNonCompile)选项设置为true . (23认同)
  • 我怎样才能在Eclipse中触发它? (4认同)

Ric*_*ler 40

正如其他人所说,您可以使用依赖关系:分析目标以查找使用和声明,使用和未声明,或未使用和声明的依赖项.您还可以找到依赖项: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>
Run Code Online (Sandbox Code Playgroud)

  • (IntelliJ)我使用了Jonnyzzz插件,对问题进行了评论.不错的插件,适用于IntelliJ 2016.1.3 (3认同)

Sai*_*pta 39

您可以使用 dependency:analyze -DignoreNonCompile

这将打印一个列表used undeclaredunused declared依赖项(同时忽略未使用的依赖项分析的runtime/ provided/ test/ system作用域.)

但是在使用它时要小心,使用的一些库runtime被认为是未使用的!

  • [加] 1为运行时提及! (3认同)

Bri*_*new 33

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

mvn dependency:tree
Run Code Online (Sandbox Code Playgroud)


小智 14

我有类似的问题,并决定编写一个删除依赖关系的脚本.使用它我很容易得到超过一半的依赖.

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

  • 注意,这个脚本不使用`mvn dependency:analyze`。它只是尝试删除每个依赖项并检查 `mvn install` 是否有效。 (2认同)