抑制 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 来评估您的依赖关系。

参考:https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html

您应该在 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>