您可以排除特定PMD规则的源文件吗?

Mar*_*ark 8 java pmd

定义PMD规则集时是否可以从特定规则中排除源文件?

我想做类似以下的事情:

<rule ref=rulesets/java/logging-java.xml>
  <exclude name="Ignore.java" />
</rule>
Run Code Online (Sandbox Code Playgroud)

仅排除似乎支持规则名称.源文件有什么类似的东西吗?

lig*_*h05 5

如果您使用该maven-pmd-plugin工具来运行 PMD,那么您可以包含一个列出要忽略的类和规则的属性文件。

排除pmd.properties

org.apache.maven.ClassA=UnusedPrivateField,EmptyCatchBlock
org.apache.maven.ClassB=UnusedPrivateField,UnusedFormalParameter,UnusedPrivateMethod
Run Code Online (Sandbox Code Playgroud)

pom.xml

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.8</version>
        <executions>
          <execution>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <excludeFromFailureFile>exclude-pmd.properties</excludeFromFailureFile>
            </configuration>
          </execution>
          <execution>
            <goals>
              <goal>cpd-check</goal>
            </goals>
            <configuration>
              <excludeFromFailureFile>exclude-cpd.properties</excludeFromFailureFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

更多详情:https : //maven.apache.org/plugins/maven-pmd-plugin/examples/violation-exclusions.html


Jea*_*sky 4

除非编写自定义规则来添加按文件名排除的逻辑。

我认为在您的场景中,最好的方法是分两次运行 PMD - 一次针对所有代码使用更大的规则集。还有一个针对您想要额外检查的代码的较小规则集。

这确实有生成两份报告的缺点。但这比您提出的问题(或创建自定义规则)更容易解决。PMD 可以生成 XML 输出。您可以通过编程方式合并这些内容,然后调用 PMD 的代码在最后生成 HTML 报告。或者您也可以只获得两份报告并立即完成。

  • 嗯,主要是因为有不同类型的*文件*,比如说测试用例和生产代码。如果您想到 [Maven 源文件夹结构](http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html),测试用例位于 `src/test /java`,所以我必须排除这些文件夹中文件的特定规则。在 Eclipse 中执行此操作的唯一方法是为测试用例创建单独的项目。我不会仅仅为了弥补 PMD 的缺点而从我的 70 个项目中制作出 140 个项目。 (3认同)