抑制 Maven 依赖插件的 "Unused declared dependencies found" 警告
Suppress Maven Dependency Plugin's "Unused declared dependencies found" warnings
maven-dependency-plugin
通过在编译时生成警告来识别它认为编译时未使用的依赖项。
[WARNING] Unused declared dependencies found:
[WARNING] org.foo:bar-api:jar:1.7.5:compile
在某些情况下,此消息是误报,需要传递相关性。
问题:如何在我的 pom.xml
中识别出这种情况?
您可以使用 mvn dependency:tree
来评估您的依赖关系。
您应该在 pom 中配置 ignoredDependencies
元素:
List of dependencies that will be ignored. Any dependency on this list will be excluded from the "declared but unused" and the "used but undeclared" list. The filter syntax is:
[groupId]:[artifactId]:[type]:[version]
where each pattern segment is optional and supports full and partial * wildcards. An empty pattern segment is treated as an implicit wildcard. *
也是官方指定的Exclude dependencies from dependency analysis。
示例配置为:
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>analyze-dep</id>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<ignoredDependencies>
<ignoredDependency>org.foo:bar-api:jar:1.7.5</ignoredDependency>
</ignoredDependencies>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
尝试使用提供的范围
提供
这很像编译,但表示您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java 企业版构建 Web 应用程序时,您可以将对 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为Web 容器提供了那些 类。此范围仅在编译和测试类路径上可用,不可传递。
这几乎就是我要找的东西,但我猜你指定的更像是:
<execution>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<failOnWarning>true</failOnWarning>
<ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependency>org.reflections:reflections:*</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
<ignoredUsedUndeclaredDependencies>
<ignoredUsedUndeclaredDependency>junit:*:*</ignoredUsedUndeclaredDependency>
</ignoredUsedUndeclaredDependencies>
<ignoreNonCompile>false</ignoreNonCompile>
<outputXML>true</outputXML>
</configuration>
</execution>
所以这几乎是一样的,但更具体的是应该忽略哪种依赖性
从 maven-dependency-plugin 版本 2.6 开始,您可以使用 usedDependencies 标签来强制使用依赖项。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<usedDependencies>
<dependency>groupId:artifactId</dependency>
</usedDependencies>
</configuration>
</plugin>
当您没有在编译时使用依赖项而是在运行时使用时,可能会出现此消息。您可以执行以下操作:
<dependency>
<groupId>org.foo</groupId>
<artifactId>bar-api</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
maven-dependency-plugin
通过在编译时生成警告来识别它认为编译时未使用的依赖项。
[WARNING] Unused declared dependencies found:
[WARNING] org.foo:bar-api:jar:1.7.5:compile
在某些情况下,此消息是误报,需要传递相关性。
问题:如何在我的 pom.xml
中识别出这种情况?
您可以使用 mvn dependency:tree
来评估您的依赖关系。
您应该在 pom 中配置 ignoredDependencies
元素:
List of dependencies that will be ignored. Any dependency on this list will be excluded from the "declared but unused" and the "used but undeclared" list. The filter syntax is:
[groupId]:[artifactId]:[type]:[version]
where each pattern segment is optional and supports full and partial * wildcards. An empty pattern segment is treated as an implicit wildcard. *
也是官方指定的Exclude dependencies from dependency analysis。 示例配置为:
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>analyze-dep</id>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<ignoredDependencies>
<ignoredDependency>org.foo:bar-api:jar:1.7.5</ignoredDependency>
</ignoredDependencies>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
尝试使用提供的范围
提供 这很像编译,但表示您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java 企业版构建 Web 应用程序时,您可以将对 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为Web 容器提供了那些 类。此范围仅在编译和测试类路径上可用,不可传递。
这几乎就是我要找的东西,但我猜你指定的更像是:
<execution>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<failOnWarning>true</failOnWarning>
<ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependency>org.reflections:reflections:*</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
<ignoredUsedUndeclaredDependencies>
<ignoredUsedUndeclaredDependency>junit:*:*</ignoredUsedUndeclaredDependency>
</ignoredUsedUndeclaredDependencies>
<ignoreNonCompile>false</ignoreNonCompile>
<outputXML>true</outputXML>
</configuration>
</execution>
所以这几乎是一样的,但更具体的是应该忽略哪种依赖性
从 maven-dependency-plugin 版本 2.6 开始,您可以使用 usedDependencies 标签来强制使用依赖项。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<usedDependencies>
<dependency>groupId:artifactId</dependency>
</usedDependencies>
</configuration>
</plugin>
当您没有在编译时使用依赖项而是在运行时使用时,可能会出现此消息。您可以执行以下操作:
<dependency>
<groupId>org.foo</groupId>
<artifactId>bar-api</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>