PMD:如何排除从规则集导入的规则



我们正在使用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仍在运行

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

有人做过类似的事吗?

事实证明这确实很好。

纯PEBKAC,问题是由于我的工作环境。

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

最新更新