如何通过regexp从pmd规则中排除类

时间:2017-10-13 11:09:01

标签: java pmd

有没有办法按类名模式从PMD规则中排除类?

我正在寻找某事:

<rule ref="rulesets/java/coupling.xml/ExcessiveImports">
    <exclude-pattern>.*Test\.class</exclude-pattern>
</rule>

我知道vioSuppressXPath方法,但我发现它太丑陋/复杂。

谢谢!

2 个答案:

答案 0 :(得分:2)

我担心没有。您目前可以完全忽略使用<exclude-pattern>进行分析的文件,但不能用于特定规则。

这背后的基本原理是,在代码库上强制执行规则集时,应尽量保持一致。在这样做时,很少考虑例外:

  • 为测试/主要代码设置单独的规则集
  • 允许压制规则可能不适用于非常具体但有效理由的个别情况

您的示例似乎指向了第一个场景的方向。如果您想为测试类提供更轻松的规则集,则应创建单独的配置并让PMD运行两个单独的分析。

然而,这不属于PMD本身的范围,而是关于如何运行它。在Gradle / Ant / CLI上,这非常简单。不幸的是,Maven目前不受支持(可以找到一个功能请求并投票here

如果您认为有另一种情况(前两种情况未涵盖),则应考虑这一情况,请在https://github.com/pmd/pmd/issues上发布功能请求

答案 1 :(得分:2)

如果类名以DTO结尾,则以下规则会忽略特定规则:

  <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>

参考https://github.com/pmd/pmd/issues/1142