2009-07-02 48 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通過解釋每個角色幫助我瞭解正則表達式。