2016-10-25 43 views
0

我们正在使用一些第三方框架,它有一个抛出异常的方法。我们不能改变这种行为。 PMD给我的代码警告SignatureDeclareThrowsException如何在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 
    } 
} 

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

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

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

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

+0

您是否有机会尝试我的答案?请接受它或让我知道我是否可以添加一些东西使其适用于您。 – HairyFotr

+0

@HairyFotr我已经更新了这个问题。对于迟到的回复感到抱歉。 –

回答

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>