Maven依赖插件:usedDependency与忽略的UnusedDeclaredDependencies

时间:2020-09-14 13:34:05

标签: maven maven-dependency-plugin

maven-dependency-plugin的{​​{3}}和ignoredUnusedDeclaredDependencies有什么区别?

我有几个运行时/测试运行时依赖项,这些依赖项由 插件未使用且已声明,并且希望忽略它们。这两个 参数似乎可以做到这一点。

有人可以提供一些关于 它们之间有什么区别?何时使用?

注意:几周前,我还在usedDependencies上发布了this questionMaven users mailing list,但在那里没有得到任何答复。

1 个答案:

答案 0 :(得分:2)

您可以发现两者之间的区别

  • 在通过ignoredUnusedDeclaredDependencies

    进行分析的过程中,只是忽略了一些内容而没有抛出警告(或错误,具体取决于插件配置)
  • 实际上告诉Maven使用了依赖关系,即使分析器无法通过usedDependencies

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

您何时会使用其中一个选项?

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

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

这是一个小示例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>
相关问题