その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Maven でFindBugs のレポートを出力させる方法

またもやMaven の話です。

FindBugs

FindBugs という大変素晴らしい静的解析ツールが存在している事は皆さんご存知の事でしょう。
FindBugsソースコード中に潜在的に存在しているバグやバグの原因となる部分を検出してくれるので非常に助かります。

大体はEclipse とかのIDE に組み込んでウヒョヒョコリャ便利じゃい!!!!! とかやってると思うんですけど、
これをMaven でドカーン!! と出力できれば、Jenkins 等のCI ツールで自動的にFindBugs のレポートを出せるので更に便利っぽいですよね。
ナイトリービルド時なんかにレポートを生成するようにすれば、ソースコードの品質をリアルタイム的にモニタリングできますし、
開発メンバー間でもそれを共有出来るので意識が高くてセカイが救われそうな感じです。

というわけで以下やり方です。

pom.xml を書く

やっぱりpom を書きます。Maven だもの。

http://mojo.codehaus.org/findbugs-maven-plugin-2.5.2/usage.html
↑に載っているコードチップをそのままpom.xml に書き込んで、
$ maven site
とかやれば上手い事いきそうなもんですが、
僕が試した環境だと上手く動作しなかったので以下のように書きました。
(普通の場合は上のページに載ってるコードチップを写せば大丈夫だと思います)

<project>
  ...
    <build>
        <plugins>
            <plugin>
		<artifactId>maven-site-plugin</artifactId>
		<configuration>
		    <reportPlugins>
		        <plugin>
			    <groupId>org.codehaus.mojo</groupId>
			    <artifactId>findbugs-maven-plugin</artifactId>
			    <version>2.5.2</version>
			    <configuration>
			        <effort>Default</effort>
				<threshold>Default</threshold>
				<xmlOutput>true</xmlOutput>
				<xmlOutputDirectory>target/site</xmlOutputDirectory>
				<excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>
			    </configuration>
			</plugin>
		    </reportPlugins>
		</configuration>
	    </plugin>
	</plugins>
    </build>
  ...
</project>
上のように書いて`$ mvn site` を実行すると、target/site ディレクトリ以下にFindBugs のレポートが出力されます。

レポートの出力先は タグ内の内容によって変更することが出来ます。(パスはpom.xml からの相対パスを指定してください)
タグと タグの中身は好みに応じて書き換えて下さい。*1

タグにファイルを指定すると、そのファイル内に記述された内容をFindBugs の解析対象から外すことが出来ます。
例 (findbugs-exclude.xml)
<FindBugsFilter>
    <Match>
        <Class name="~.*\.R" />
    </Match>
    <Match>
        <Class name="~.*\.R\$.*" />
    </Match>
</FindBugsFilter>
上のように書いておくと、末尾が'R' もしくは末尾が'R$<0文字以上の任意の文字>' のクラスをFindBugs の解析対象から外せます。

また逆に タグにファイルを指定すると、そのファイル内に記述された内容のみFindBugs の解析対象にします。
ならびに の書式はどちらも共通です。詳細な書式については以下を参照して下さい。
http://findbugs.sourceforge.net/manual/filter.html

*1:参考: [http://mojo.codehaus.org/findbugs-maven-plugin-2.5.2/check-mojo.html]