PMD 定制化忽略某些类、方法或字段

1,077 阅读1分钟

PMD 定制化忽略某些类、方法或字段

某些情况下,希望单独忽略 PMD的校验,但是由于该场景下可能包含很多类、字段或者方法。

如果直接在压制告警的地方使用@SuppressWarnings,那写的太多。

如果在上级写,一是容易误伤,二是某些场景没有上级。

希望可以在一个统一的地方,进行定制化的配置。

pmd-rule.xml

在根目录下的pmd-rule.xml对规则进行配置。

下面示例中,希望忽略 Repository 类的方法,因为项目场景中不适合写 Javadoc

<rule ref="rulesets/java/ali-comment.xml/AbstractMethodOrInterfaceMethodMustUseJavadocRule">
  <properties>
    <!-- 根据正则匹配,不过由于是匹配当前元素。因此较为局限 -->
    <property name="violationSuppressRegex" value=".*'Repository'.*"/>
    <!-- 根据XPath语法匹配 -->
    <!-- 忽略所在类名称包含'Repository'的方法 -->
    <property name="violationSuppressXPath" value="./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'Repository')]"/>
    <!-- Repository 可以改成正则表达式,比如'^.*Repository$' 以 Repository 结尾的类名-->
  </properties>
</rule>

对于上述的ClassOrInterfaceDeclaration使用暂无头绪,应该是语法树的使用。

参考

PMD :pmd.github.io/latest/pmd_…

XPath:www.w3school.com.cn/xpath/xpath…

AST of PMD :pmd.github.io/latest/pmd_…