定义PMD规则集时,是否可以从特定规则中排除源文件?
我想做以下事情:
<rule ref=rulesets/java/logging-java.xml>
<exclude name="Ignore.java" />
</rule>
规则名称似乎只支持排除。源文件有什么类似的东西吗?
答案 0 :(得分:4)
编写自定义规则,添加逻辑以便按文件名排除。
我认为在您的场景中,最好的方法是在两次传递中运行PMD - 一次针对所有代码使用更大的规则集。而对于需要额外检查的代码的规则较小的一个。
这确实有产生两份报告的缺点。但是,这比您提出的问题(或者创建自定义规则)更容易解决.PMD可以生成XML输出。您可以以编程方式合并这些,然后调用PMD的代码在最后生成HTML报告。或者您可以只有两份报告并立即完成。
答案 1 :(得分:2)
如果您使用maven-pmd-plugin
工具运行PMD,那么您可以包含一个属性文件,列出要忽略的类和规则。
org.apache.maven.ClassA=UnusedPrivateField,EmptyCatchBlock
org.apache.maven.ClassB=UnusedPrivateField,UnusedFormalParameter,UnusedPrivateMethod
<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>
更多详情:https://maven.apache.org/plugins/maven-pmd-plugin/examples/violation-exclusions.html
答案 2 :(得分:1)
似乎PMD仅支持RuleSet level
中的排除文件。
我们要求排除Rule level
..
最后,我们自己写一个客户wrapper lab
和控制器文件遍历逻辑来解决这个问题。
但是对于正常的PMD任务..我们可以将规则相同的规则组合在一起,并在ruleSet级别中将其排除。
更新:我们发现扩展net.sourceforge.pmd.lang.rule.XPathRule
,添加排除文件很简单。对于Java Code Rule
,我们可以使用相同的方法在规则定义中排除文件。
答案 3 :(得分:1)
试试这个:
<rule ref="category/java/bestpractices.xml/UnusedPrivateField">
<properties>
<!--Ignore UnusedPrivateField on classes where the class name ends with DTO-->
<property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['.*DTO']"/>
</properties>
</rule>
您还可以排除文件夹。例如,您要排除具有“sample”名称的文件夹,在这种情况下,值将类似于:
value="//ClassOrInterfaceDeclaration['.*/sample/.*']"
有关详细信息,请查看此处https://github.com/pmd/pmd/issues/1142