用法

PMD 插件使用 PMD 代码分析工具生成 PMD 和 CPD 报告。

要在项目站点中包含具有默认规则集和配置的报告,请在 POM 的<reporting>部分中设置以下内容:

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.16.0</version>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>

您还可以通过在 POM 的<build>部分中设置插件来显式执行 PMD 插件并生成相同的报告,如下所示:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.16.0</version>
      </plugin>
    </plugins>
  </build>
  ...
</project>

配置

PMD 和 CPD 报告共享相同的配置。例如,以下内容告诉 Maven 在生成站点报告时运行 PMD 和 CPD 报告。

如果您使用linkXRef参数启用此功能,报告将直接链接到交叉引用的源。有关更多详细信息,请参阅JXR 插件

如果您的源代码使用非默认编码,您可以使用sourceEncoding参数告诉 Maven 在读取 java 源代码时使用哪种编码。还要注意排除要忽略的源的能力。

您可以配置触发 CPD 的最小代码大小。默认的100 个令牌对应于大约 5-10 行代码。

由于 PMD 解析 Java 源代码,因此它需要知道要使用哪个 Java 版本。以下是可能的配置:

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.16.0</version>
        <configuration>
          <linkXref>true</linkXref>
          <sourceEncoding>utf-8</sourceEncoding>
          <minimumTokens>100</minimumTokens>
          <targetJdk>1.5</targetJdk>
          <excludes>
            <exclude>**/*Bean.java</exclude>
            <exclude>**/generated/*.java</exclude>
          </excludes>
          <excludeRoots>
            <excludeRoot>target/generated-sources/stubs</excludeRoot>
          </excludeRoots>
        </configuration>
        <reportSets>
          <reportSet><!-- by default, id = "default" -->
            <reports><!-- select non-aggregate reports -->
              <report>pmd</report>
              <report>cpd</report>
            </reports>
          </reportSet>
          <reportSet><!-- aggregate reportSet, to define in poms having modules -->
            <id>aggregate</id>
            <inherited>false</inherited> <!-- don't run aggregate in child modules -->
            <reports>
              <report>aggregate-pmd</report>
              <report>aggregate-cpd</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>