我有一个包含许多模块和许多pom.xml
文件的大型 Maven 项目。项目发生了变化,我怀疑 pom 包含一些不必要的依赖项。是否有一个命令可以从 pom 中删除任何未使用的依赖项?
7 回答
Maven 依赖插件将有所帮助,尤其是dependency:analyze
目标:
dependency:analyze
分析该项目的依赖关系并确定哪些是:已使用和已声明;使用和未声明;未使用和声明。
另一件可能有助于进行清理的事情是来自Maven Project Info Reports Plugin的Dependency Convergence 报告。
您可以使用dependency:analyze -DignoreNonCompile
这将打印已使用的未声明和未使用的已声明依赖项的列表(同时忽略runtime
///provided
未使用依赖项分析的范围。)test
system
## 使用时要小心,一些使用的库runtime
被认为是未使用的
正如其他人所说,您可以使用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>
你看过Maven 依赖插件吗?这不会为您删除东西,但有工具可以让您自己进行分析。我特别想
mvn dependency:tree
我遇到了类似的问题,并决定编写一个脚本来为我删除依赖项。使用它,我很容易摆脱了一半以上的依赖关系。
http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html
您可以使用 DepClean https://github.com/castor-software/depclean/
DepClean 是一个工具,用于自动删除包含在 Java 依赖关系树中但实际上并未在项目代码中使用的依赖关系。
如果您使用的是 eclipse,请右键单击 Maven Dependencies 中的 jar:选择 Maven -> Exclude Maven Artifact...