2009-07-02 95 views
7

我正在评估FindBugs,并试图使用excludeFilter,以便该工具不处理测试包或生成的ejb存根。FindBugs问题排除过滤器

我曾尝试以下:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Or> 
     <Class name="~.*\.^_*"/> 
     <Class name="~.*EJS*"/> 
    </Or> 
    <Bug pattern="MALICIOUS_CODE"/> 
</Match> 

生成EJB的仍在看着。有人可以提供一些更好的方向。

我要排除,随着启动所有类 “_”

例子:

COM/myCompany中/业务/管理/ EJB/_AdminRemoteHome_Stub.java

COM/myCompany中/业务/ admin/ejb/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java

更新的过滤文件。

我使用建议至REGx的变化而变化的过滤器文件到以下结构和预期现在一切正常:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Class name="~.*\._.*"/> 
</Match> 
<Match> 
    <Class name="~.*?EJS.*"/>  
</Match> 

看起来我需要回去刷了我的至REGx。

+0

EJS类是否仍然显示?你现在只有'_'类的问题吗? – VonC 2009-07-02 11:35:11

回答

7

关于FindBugFilter

(只是要确定)。您确定要考虑的已编译的类文件directoriesa,而不是SOURCEPATH? (如在此SO answer中所述)。

Java element name matching部分:

如果类的name属性,方法或字段用〜字符的属性内容的其余部分被解释为Java正则表达式是对名称匹配的开始有问题的Java元素。

下面的正则表达式会更精确吗?

<Class name="~.*\._.*"/> 
    <Class name="~.*?EJS.*"/> 
  • .*\._.*”而不是“.*\.^_*”,因为anchor应该以匹配正则表达式模式被施加到串的开始。

  • .*?EJS.*” 而不是 “.*EJS*” 因为?quantifier使匹配懒,避免 '吃' EJS。 (加“S*”是指“0或N S”,这不帮助这里)

+0

我刚刚使用了你的建议,但这些课程仍然在报告中显示。 – boyd4715 2009-07-02 11:06:52

1

我FindBugs的排除文件并未如上述工作。我使用findbugs-maven-plugin v3.0.0。为了解决这个问题,我运行了一个生成findbugsXml的版本。xml,然后发布:

mvn findbugs:gui 

这将启动用户界面findbugs。然后我加载findbugsXml.xml文件,导航到我希望排除的警告,排除它们,然后将排除项保存到findbugs_exclude.xml。我已将此添加到Maven插件为

<excludeFilterFile>findbugs_exclude.xml</excludeFilterFile> 

生成的文件工作和排除是真正从FindBugs的报告中省略。

另一个伟大的提示,我发现了Maven插件是添加:

<omitVisitors>UnreadFields</omitVisitors> 
0

这有利于一提的是,如果一个类应该被排除在外,小心它的内部类。我花时间找出替代

<Match> 
    <Class name="com.some.Proto" /> <!--or com.some.Proto$.*--> 
</Match> 

我应该通过一个

<Match> 
    <Or> 
    <Class name="com.some.Proto$Event" /> 
    <Class name="com.some.Proto$Msg" /> 
    <Class name="com.some.Proto$Query" /> 
    </Or> 
</Match> 

到目前为止使用带有一个上市公司内部类下面的配置我还没有找到如何排除一个类和它的所有子类(filter不是线索),一个简单的正则表达式如com.some.Proto$.*只是不起作用。而且我也注意到$在正则表达式意味着行结束,而findbugs把它看作是我想的文本字符,否则它应该是com.some.Proto\$Query。此外,有价值的regex tester通过解释每个角色帮助我了解正则表达式。