2009-07-02 42 views
7

FindBugsの評価中で、ツールがテストパッケージまたは生成されたejbスタブを処理しないようにexcludeFilterを使用しようとしています。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のはまだ見られています。誰かがこれについてよりよい方向を与えることができますか?

Iで始まるすべてのクラスを除外したい

"_"

例:

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

答えて

7

FindBugFilter

について(念のため)あなたは、sourcePathはコンパイル済みのクラスファイルのdirectoriesaを考慮し、されていないことを確認していますか? (このSO answerに記載されているように)。 Java element name matchingセクションから

クラスのname属性は、メソッドまたはフィールドは、属性、コンテンツの残りの部分は名前と照合されJavaの正規表現として解釈される〜文字で始まる場合問題のJava要素の

次の正規表現はより正確になりますか?代わりに「.*\.^_*」の

<Class name="~.*\._.*"/> 
    <Class name="~.*?EJS.*"/> 
  • .*\._.*anchorは、正規表現パターンが適用される文字列の先頭に一致するようになっているからです。

    ".*?EJS.*" ではなく ".*EJS*" の
  • ?quantifierはEJSを '食べ' に避け、マッチングが怠惰なるため。

+0

私はあなたの提案を使用しましたが、クラスは依然としてレポートに表示されています。 、 COM/mycompanyの/ビジネス/管理/ EJB/_AdminRemoteHome_Stub.java ライン33 \t MALICIOUS_CODE \tが、私は同じ問題を抱えている可変オブジェクト – boyd4715

+0

は、レポートが生成されたものです を<パッケージ名= "〜*" /> < "*" パッケージ名= /> boyd4715

+1

への参照を返すことにより内部表現を暴露する可能性があります。ここでは – HaveAGuess

1

マイFindBugsのファイルは、上記のように働いていなかった除外する(プラス「S*は」意味「0またはN S」ここには役立ちません)。私はfindbugs-maven-plugin v3.0.0を使用しています。この問題を解決するために、findbugsXmlを生成したビルドを実行しました。xml、次に発行された:

mvn findbugs:gui 

これで、findbugsのユーザーインターフェイスが起動します。次に、findbugsXml.xmlファイルをロードし、除外したい警告に移動し、それらを除外して、除外をfindbugs_exclude.xmlに保存しました。

<excludeFilterFile>findbugs_exclude.xml</excludeFilterFile> 

生成されたファイルの作品や除外が真にFindBugsのレポートから除外されているように私は、Mavenプラグインにこれ​​を追加しました。私はMavenプラグインが見つかり

もう一つの大きなヒントは、追加することでした:

<omitVisitors>UnreadFields</omitVisitors> 
0

クラスが除外されることになっている場合は、その内部クラスで注意することを言及すると便利です。これは、代わりに

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

の私は1つ

<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は、正規表現について、その中のすべての文字を説明することによって助けてくれました。

関連する問題