【问题标题】:Is there a simple way to remove unused dependencies from a maven pom.xml?有没有一种简单的方法可以从 maven pom.xml 中删除未使用的依赖项?
【发布时间】:2010-12-03 19:23:44
【问题描述】:

我有一个包含许多模块和许多 pom.xml 文件的大型 Maven 项目。项目发生了变化,我怀疑 pom 包含一些不必要的依赖项。是否有一个命令可以从 pom 中删除任何未使用的依赖项?

【问题讨论】:

  • 如果您使用 IntelliJ,请参阅:jonnyzzz.com/blog/2013/05/13/… 如果出现死链接:Jonnyzzz 依赖插件
  • @Benj 我尝试使用这个 jonnyzz 插件,但没用。大多数时候它不会找到任何未使用的依赖项,有时它会从类路径中删除依赖项,而不是从 build.gradle 文件中删除。我什至找不到合适的文档来解释这个插件是如何工作的。
  • @vaibhav.g 感谢您的更新。自 2016 年以来,情况似乎确实发生了变化。

标签: maven maven-2


【解决方案1】:

你看过Maven Dependency Plugin 吗?这不会为您删除东西,但有工具可以让您自己进行分析。我特别想

mvn dependency:tree

【讨论】:

  • 非常好-谢谢(找不到我要找的东西,因为我一直在搜索“干净的依赖项”,它抛出了干净的插件!!但这看起来很有希望.. mvn dependency:analyze )
【解决方案2】:

Maven Dependency Plugin 会有所帮助,尤其是dependency:analyze 目标:

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

另一件可能有助于进行清理的事情是来自Maven Project Info Reports PluginDependency Convergence report

【讨论】:

  • 如何在 Eclipse 中触发?
  • 小心依赖:分析,一些在运行时使用的库被认为是未使用的。
  • 为了防止将运行时和提供的依赖项报告为未使用,ignoreNonCompile 选项可以设置为 true。
  • 使用依赖时要小心:分析,即使我使用的是'ejp api3'依赖,但报告显示它是'未使用和声明'
  • 要了解分析结果,请参阅此答案:“使用未声明的依赖项是必需的,但尚未在项目中明确声明为依赖项。” - stackoverflow.com/questions/4565740/…
【解决方案3】:

正如其他人所说,您可以使用dependency:analyze 目标来查找使用和声明、使用和未声明或未使用和声明的依赖项。您可能还会发现 dependency:analyze-dep-mgt 在您的依赖管理部分中查找不匹配项很有用。

您可以简单地从您的 POM 中删除不需要的直接依赖项,但如果它们是由第三方 jar 引入的,您可以在依赖项中使用 <exclusions> 标记来排除第三方 jar(参见标题为 Dependency Exclusions 了解详细信息和一些讨论)。这是一个从 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>

【讨论】:

  • (IntelliJ) 正如对问题的评论,我使用了 Jonnyzzz 插件。不错的插件,与 IntelliJ 2016.1.3 配合得很好
【解决方案4】:

我遇到了类似的问题,并决定编写一个脚本来为我删除依赖项。使用它我很容易摆脱了一半以上的依赖关系。

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

【讨论】:

  • 注意,这个脚本不使用mvn dependency:analyze。它只是尝试删除所有依赖项并检查 mvn install 是否有效。
【解决方案5】:

你可以使用dependency:analyze -DignoreNonCompile

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

## 使用时要小心,runtime 使用的一些库被认为是未使用的

For more details refer to this link

【讨论】:

  • [plus] 1 用于运行时提及!
  • 你说得对,一些运行时依赖项被清除为未使用但实际上需要。
  • 有帮助,但仍不是 100% 正确。我可以看到 Groovy 使用的一些依赖项,但仍然列出。
【解决方案6】:

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

【讨论】:

  • 显然这不符合我们的要求......
【解决方案7】:

您可以使用 DepClean https://github.com/castor-software/depclean/

DepClean 是一种工具,可自动删除包含在 Java 依赖关系树中但实际上并未在项目代码中使用的依赖关系。

【讨论】:

    猜你喜欢
    • 2016-07-30
    • 2014-04-15
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多