Maven 依赖插件:usedDependency 与 ignoredUnusedDeclaredDependencies
Maven Dependency Plugin: usedDependency vs. ignoredUnusedDeclaredDependencies
maven-dependency-plugin
和ignoredUnusedDeclaredDependencies
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>
maven-dependency-plugin
和ignoredUnusedDeclaredDependencies
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>