ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

P
Pascal Thivent

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

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

可能有助于进行一些清理的另一件事是 Maven Project Info Reports Plugin 中的 Dependency Convergence report


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

您可以使用 dependency:analyze -DignoreNonCompile

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

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

For more details refer to this link


[加] 1 用于运行时提及!
你是对的,一些运行时依赖项被清除为未使用但实际上需要。
有帮助,但仍然不是 100% 正确。我可以看到 Groovy 使用的一些依赖项,但仍然列出。
R
Rich Seller

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

您可以简单地从您的 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
B
Brian Agnew

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

mvn dependency:tree

太好了-谢谢(找不到我想要的东西,因为我一直在搜索“干净的依赖项”并且它正在抛出干净的插件!!但这看起来很有希望.. mvn dependency:analyze)
u
user1132305

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

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


请注意,此脚本不使用 mvn dependency:analyze。它只是尝试删除所有依赖项并检查 mvn install 是否有效。
M
Martin Monperrus

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

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


U
Usman Mohyuddin

如果您使用的是 eclipse,请右键单击 Maven Dependencies 中的 jar:选择 Maven -> Exclude Maven Artifact...


显然这不符合我们正在寻找的......