通过将dependency:analyze-only目标绑定到生命周期,可以在构建过程中分析项目的依赖关系。默认情况下,分析将在验证生命周期阶段执行。
在极少数情况下,类路径上可能存在合法的依赖项,但会导致“已声明但未使用”或“未声明但已使用”警告。最常见的情况是 jar 包含注释,字节码分析无法确定是否实际需要 jar。
然后可以将插件配置为在“已声明但未使用”或“未声明但已使用”情况下或同时忽略这些依赖关系。有关示例,请参见以下 POM 配置:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>analyze</id>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<failOnWarning>true</failOnWarning>
<!-- ignore jsr305 for both "used but undeclared" and "declared but unused" -->
<ignoredDependencies>
<ignoredDependency>com.google.code.findbugs:jsr305</ignoredDependency>
</ignoredDependencies>
<!-- ignore annotations for "used but undeclared" warnings -->
<ignoredUsedUndeclaredDependencies>
<ignoredUsedUndeclaredDependency>com.google.code.findbugs:annotations</ignoredUsedUndeclaredDependency>
</ignoredUsedUndeclaredDependencies>
<!-- ignore annotations for "unused but declared" warnings -->
<ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependency>com.google.code.findbugs:annotations</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>请注意,dependency:analyze-only目标优先于dependency:analyze使用,因为它不会强制对项目进行进一步编译,而是使用生命周期中早期测试编译阶段生成的编译类。
然后在验证生命周期阶段会自动分析项目的依赖关系,可以显式执行如下:
mvn verify