【问题标题】:PMD: How to exclude a rule imported from a rulesetPMD:如何排除从规则集中导入的规则
【发布时间】:2021-05-31 16:38:21
【问题描述】:

我们正在使用PMD 来评估我们的“主要”源代码的质量。我们有自己的自定义规则集,其中包括一些类别规则集并排除了一些特定规则。

简化示例,文件名为pmd.xml

<?xml version="1.0"?>
<ruleset name="Main rules"
         xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

  <description>Main rules</description>

  <rule ref="category/java/bestpractices.xml">
    <exclude name="GuardLogStatement"/>
  </rule>
  <rule ref="category/java/security.xml"/>
</ruleset>

分析是从 gradle 启动的,它适用于我们的“主要”源代码。

现在我们想为我们的“测试”源代码获得另一个更宽松的规则集。由于我们不想重复我们的规则集,我们想做的是导入这个主要规则集,并排除更多规则。

所以我们基本上希望排除GuardLogStatement,并排除规则UnusedPrivateMethod,文件看起来像这样。

<?xml version="1.0"?>
<ruleset name="Test rules"
         xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

  <description>Test rules</description>

  <!-- Test rules are based on rules for main -->
  <rule ref="./config/pmd.xml">
    <exclude name="UnusedPrivateMethod"/>
  </rule>

</ruleset>

这不起作用:

  • GuardLogStatement 被排除在外,但是
  • UnusedPrivateMethod 仍在运行。

我在文档中没有看到任何关于如何从规则集中排除规则的参考。

有人做过类似的事情吗?

【问题讨论】:

    标签: pmd


    【解决方案1】:

    事实证明这实际上工作正常。

    纯PEBKAC,问题出在我的工作环境。

    我保留了这个问题,因为它展示了一种从主代码规则集派生的测试代码规则集的绝妙方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多