首页 文章

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

提问于
浏览
4

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

我正在寻找......

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

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

谢谢!

2 回答

  • 2

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

    这背后的基本原理是,在代码库上强制执行规则集时,应尽量保持一致 . 在这样做时,几乎没有例外:

    • 具有单独的测试/主要代码规则集

    • 允许压制规则可能不适用于非常具体但有效理由的个别情况

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

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

    如果您认为有其他方案(前两个方案未涵盖),应考虑到这一点,请在https://github.com/pmd/pmd/issues上发布功能请求

  • 2

    如果类名以 DTO 结尾,则's a rule that'将忽略特定规则:

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

相关问题