Maven 依赖插件:usedDependency 与 ignoredUnusedDeclaredDependencies

Maven Dependency Plugin: usedDependency vs. ignoredUnusedDeclaredDependencies

maven-dependency-pluginignoredUnusedDeclaredDependencies and usedDependencies有什么区别?

我有几个 runtime/test-runtime 依赖项被标记为 未使用和声明的插件,并希望忽略它们。这两个 参数似乎可以做到这一点。

有人可以澄清一下吗 它们之间有什么区别,什么时候使用哪个?

注意:几周前我也发布了 this question to the Maven users mailing list,但没有得到任何回复。

你可以看出两者之间的区别

  • 在通过 ignoredUnusedDeclaredDependencies

    的分析过程中忽略某些内容而不抛出警告(或错误,取决于插件配置)
  • 实际上告诉 Maven 使用了依赖项,即使分析器无法通过 usedDependencies

    检测到它

通过 运行ning 目标 dependency:analyze-report 并查看 target/dependency-analysis.html 中的报告:在前一种情况下,忽略的未使用依赖项仍将列为“已使用未声明”。在后一种情况下,将不会列出依赖项,因为您告诉 Maven 它实际上在您的项目中使用。

您什么时候会使用任一选项?

  • 如果有一个实际未使用的依赖项,但出于任何原因您希望忽略它并且不为其发出任何警告或错误,请使用 ignoredUnusedDeclaredDependencies。不过,报告仍会列出它,因此提醒您最终要清理。

  • 基于字节码进行依赖分析。因此,如果您使用某些注释具有保留范围 SOURCE 的注释库,Maven 无法检测注释的使用,因为这些注释未包含在已编译的 class 文件中。但它们仍然被使用。在这种情况下,您使用 usedDependencies。因此并且正确地,如此声明的已使用依赖项不会在分析报告中显示为未使用。另一个用例是,如果您通过反射加载 classes 而 Maven 依赖插件无法检测到它。

这是一个 POM 示例。只需 运行 mvn dependency:analyze-report,查看报告 HTML,然后切换到注释掉的选项以查看差异。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>de.scrum-master</groupId>
  <artifactId>used-vs-ignoredUnused</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.2</version>
        <configuration>
          <ignoredUnusedDeclaredDependencies>
            <ignoredUnusedDeclaredDependency>
              commons-collections:::
            </ignoredUnusedDeclaredDependency>
          </ignoredUnusedDeclaredDependencies>
<!--
          <usedDependencies>
            <usedDependency>
              commons-collections:commons-collections
            </usedDependency>
          </usedDependencies>
-->
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2</version>
    </dependency>
  </dependencies>

</project>