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


当前回答

正如其他人所说,您可以使用依赖项:analyze goal来查找哪些依赖项被使用和声明,哪些依赖项被使用和未声明,哪些依赖项未使用和声明。你可能还会发现dependency: analysis -dep- mgmt在你的dependencyManagement部分中查找不匹配是有用的。

您可以简单地从POM中删除不需要的直接依赖项,但如果它们是由第三方jar引入的,则可以在依赖项中使用<exclusions>标记来排除第三方jar(有关详细信息和一些讨论,请参阅依赖项排除部分)。下面是一个从Spring依赖中排除common -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>

其他回答

如果你正在使用eclipse,右键单击Maven Dependencies中的jar: 选择Maven ->排除Maven工件…

正如其他人所说,您可以使用依赖项:analyze goal来查找哪些依赖项被使用和声明,哪些依赖项被使用和未声明,哪些依赖项未使用和声明。你可能还会发现dependency: analysis -dep- mgmt在你的dependencyManagement部分中查找不匹配是有用的。

您可以简单地从POM中删除不需要的直接依赖项,但如果它们是由第三方jar引入的,则可以在依赖项中使用<exclusions>标记来排除第三方jar(有关详细信息和一些讨论,请参阅依赖项排除部分)。下面是一个从Spring依赖中排除common -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>

你可以使用dependency:analyze -DignoreNonCompile

这将打印已使用的未声明依赖项和未声明依赖项的列表(同时忽略未使用依赖项分析的运行时/提供/测试/系统范围)。

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

欲了解更多详情,请参阅此链接

您可以使用dependency_cleaner https://github.com/junaidbs/dependency_cleaner 这个罐子将帮助识别和删除pom中不需要的依赖项。 它将自动执行删除依赖项的过程并运行,然后检查该依赖项是否需要

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

DepClean是一个自动删除包含在Java依赖树中但实际没有在项目代码中使用的依赖项的工具。