从依赖关系分析中排除依赖关系

dependency:analyze-only通过将目标绑定到生命周期,可以将项目的依赖关系作为构建过程的一部分进行分析。默认情况下,分析将在verify生命周期阶段执行。

在极少数情况下,类路径上可能存在合法的依赖项,但会导致“已声明但未使用”或“未声明但已使用”警告。最常见的情况是 jar 包含注释,字节码分析无法确定是否实际需要 jar。

然后可以将插件配置为忽略所选列表中或同时忽略“已声明但未使用”、“未声明但已使用”和“非测试范围”的依赖项。

有关示例,请参见以下 POM 配置:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>analyze</id>
            <goals>
              <goal>analyze-only</goal>
            </goals>
            <configuration>
              <failOnWarning>true</failOnWarning>

              <!-- ignore jsr305 for "used but undeclared", "declared but unused", and "non-test scoped" -->
              <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>

              <!-- ignore annotations for "non-test scoped" warnings -->
              <ignoredNonTestScopedDependencies>
                <ignoredNonTestScopedDependency>com.google.code.findbugs:annotations</ignoredNonTestScopedDependency>
              </ignoredNonTestScopedDependencies>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

请注意,dependency:analyze-only优先使用目标,dependency:analyze因为它不会强制对项目进行进一步编译,而是使用从test-compile生命周期的早期阶段生成的已编译类。

然后在verify生命周期阶段会自动分析项目的依赖关系,可以如下显式执行:

mvn verify