如何在PMD中抑制特定包的SignatureDeclareThrowsException警告?

时间:2016-10-25 05:02:03

标签: pmd static-code-analysis

我们正在使用一些第三方框架,它有一个抛出异常的方法。我们无法改变这种行为。 PMD正在为该代码提供SignatureDeclareThrowsException警告。

如何配置PMD以忽略特定包中的SignatureDeclareThrowsException警告? 我的班级签名就像这样

package my.company.ui.listeners;

public class XYZListner extends Composer<Component> {
    @Override
    public void onCompose(Component comp) throws Exception {
        super.onCompose(comp);
        // my code 
    }
}

我想忽略所有类my.company.ui.listeners包中的PMD警告。

根据@HairyFotr建议,我修改了strictexception.xml文件,并在规则SignatureDeclareThrowsException中添加了以下内容。

    <properties>
        <property name="violationSuppressXPath" value="//PackageDeclaration/Name[starts-with(@Image, 'my.company.ui.listeners')]" />
    </properties>

但它仍然没有忽略这些类。

1 个答案:

答案 0 :(得分:0)

在规则集中,您可以使用exclude-pattern标记排除特定路径。

<exclude-pattern>.*/path/to/third/party/framework/.*</exclude-pattern>

这将禁用指定路径模式的所有PMD警告,而不只是SignatureDeclareThrowsException,但由于您无法更改此代码,我猜您对此不感兴趣这个包裹的任何警告。

如果您只想抑制此警告,则可以使用violationSuppressXPath属性来执行此操作,您可以在规则集中包含此规则。找到规则并在其中添加属性(将third.party.framework更改为实际的包名称):

<rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException">
  <properties>
    <property name="violationSuppressXPath" value="//PackageDeclaration/Name[starts-with(@Image, 'third.party.framework')]" />
  </properties>
</rule>