FindBugsのフィルタファイルを作る

FindBugsでどのルール(ディテクタ?)を採用するかを指定する場合、Eclipeの設定画面で行う。
ただ、これだとMavenFindBugsを動かしたときに、同じ設定で動かすことができない。
このような場合に、フィルタファイルというものを作成すると
同じ設定でFindBugsを動作させることができる。


ちなみに、このファイルの作成って手作業っぽいんだよなー。
めんどい・・・。

作り方

マニュアルに書いてあるとーりにXMLファイルを作成する。
たとえば、以下のような感じ。

<FindBugsFilter>
     <Match>
       <Bug pattern="SQL_BAD_RESULTSET_ACCESS,SQL_BAD_PREPARED_STATEMENT_ACCESS,・・・" />
     </Match>
</FindBugsFilter>

Bugタグには利用したいルールのBugPatternかBugCodeを指定できる。
(BugCodeを指定する場合は、code属性を使う)


とはいえ、BugPatternとかBugCodeなんて普通はわからないので、
これなんかを使うと便利かも。
# このツールで、BugTypeと出力される列がBugPattern


あとは、パッケージやクラスによってルールを分けることもできるらしい。

Mavenでの指定方法

マニュアルまんまなわけですが、こんな感じ。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <configuration>
        <threshold>Low</threshold>
        <effort>Max</effort>
        <includeFilterFile>FindBugsFilter.xml</includeFilterFile>
    </configuration>
</plugin>

この場合、Mavenプロジェクト直下にFindBugsFilter.xmlを置いている。

おまけ

EclipseFindBugsを設定する場合、通常(?)はチェックボックスをがんばって
On/Offしていくけど、このフィルタファイルを使うこともできる。
方法は、プロジェクトのプロパティ>FindBugs>Filter filesタブで
フィルタファイルを指定するだけ。
# 某OSSプロジェクト×2では、がんばってチェックボックスを総なめして
# 設定していったんだけど、こっちのほうが圧倒的にラクだったという衝撃