Skip to content

如何检查 Java 项目

Mengting Chen edited this page Jan 9, 2024 · 4 revisions

NaiveSystems Analyze 社区版将陆续集成多个可对 Java 项目进行静态分析的工具。

PMD(Programming Mistake Detector)

PMD 是一个开源的静态代码分析工具,旨在帮助开发者发现和修复 Java、JavaScript、PLSQL、XML 和 XSL 代码中的常见编码错误。PMD执行静态代码分析不需要实际运行代码,也不需要对代码进行编译。

PMD 支持的所有 Java 规则在 Java Rules,它将规则分为了八大类:Best Practices(bestpractices)、Code Style(codestyle)、Design(design)、Documentation(documentation)、Error Prone(errorprone)、Multithreading(multithreading)、Performance(performance)、Security(security)。

我们可以通过自定义规则集的方式来运行 PMD,示例代码在//pmd/java/assignment_to_non_final_static,也可在 pmd-demo 上试用。

  1. .naivesystems文件夹新建pmd_java_rules,它将自定义所要检查的 built-in 的规则合集。
errorprone/AssignmentToNonFinalStatic

上面只包含了一个 Error Prone 类别的 AssignmentToNonFinalStatic 这一个 built-in 的规则。如需检查更多的规则,将更多的规则以相同的格式列在此文件中。

NaiveSystems Analyze 将根据此文件自动生成一个 PMD 所需要的*.xml文件,路径在 output/logs/pmd_java_rules.xml

  1. 运行镜像得到 PMD 的规则结果,将保存至output/results.nsa_results。在这个过程中,它将生成一个 SARIF 格式的中间文件,保存至output/logs/pmd_java_results.json

  2. (Optional)如果需要go test测试,在*test.go里调用runner.RunPMD

runner.RunPMD(tc.Srcdir, srcDir, logDir, testlib.GetPMDBinPath())

Error Prone

Error Prone 专注于识别并修复 Java 代码中的潜在错误和不良实践,它将在代码编译过程中进行静态分析。

对于 Maven 项目,需要将pom.xml中添加配置至maven-compiler-plugin

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>8</source>
          <target>8</target>
          <encoding>UTF-8</encoding>
          <compilerArgs>
            <arg>-XDcompilePolicy=simple</arg>
            <arg>-Xplugin:ErrorProne</arg>
          </compilerArgs>
          <annotationProcessorPaths>
            <path>
              <groupId>com.google.errorprone</groupId>
              <artifactId>error_prone_core</artifactId>
              <version>${error-prone.version}</version>
            </path>
            <!-- Other annotation processors go here.

            If 'annotationProcessorPaths' is set, processors will no longer be
            discovered on the regular -classpath; see also 'Using Error Prone
            together with other annotation processors' below. -->
          </annotationProcessorPaths>
        </configuration>
      </plugin>
    </plugins>
  </build>

详细的安装步骤及更多的参数配置请参见:https://errorprone.info/docs/installation

NaiveSystems Analyze 将自动完成 Error Prone 的安装与配置,用户只需要:

  1. .naivesystems文件夹新建error_prone_rules,指定需要检查的 bug pattern id。Error Prone 支持的所有规则在 Bug Patterns
CollectionIncompatibleType
  1. 运行镜像得到 Error Prone 的规则结果,将同样保存至output/results.nsa_results

可在 error-prone-demo 上试用。