316

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

4

7 回答 7

238

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

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

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

于 2009-10-04T22:59:55.780 回答
82

您可以使用dependency:analyze -DignoreNonCompile

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

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

有关更多详细信息,请参阅此链接

于 2017-03-23T05:06:02.243 回答
45

正如其他人所说,您可以使用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>
于 2009-10-05T07:23:28.863 回答
35

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

mvn dependency:tree
于 2009-10-04T22:51:55.013 回答
15

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

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

于 2012-01-05T14:11:40.357 回答
0

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

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

于 2021-10-29T14:24:55.657 回答
-3

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

于 2021-07-26T18:48:33.333 回答