Jenkins + Maven で JavaNCSS プラグインを使う

Jenkins で Java プロジェクトを継続的インテグレーションする際に
規模を計測するのに JavaNCSS が便利である。

JavaNCSS とは?

JavaNCSS の NCSS は Non Commenting Source Statements の略で
ソースコードの行のうちコメント(や空行)でない行のことである。
JavaNCSS を使えば、個人のコーディングスタイルに左右されずに
本質的な規模を計測することができる。

Jenkins + Maven で使う場合の問題点

Jenkins 上で Maven プロジェクトで使おうとすると問題がある。
Jenkins のジョブの設定で

mvn package site

としても、レポートが表示されない。
CheckstyleFindBugs では出るのに、JavaNCSS はなぜか表示されない。

原因は、JavaNCSS プラグインが site ゴールで呼び出されることを想定していないためである。

[解決策1] JavaNCSS のゴールを明示的に呼び出す

JavaNCSS のレポートを生成するゴールを明示的に呼び出せばいい。
例えばジョブの設定で

mvn package javancss:report

とすれば、JavaNCSS のレポートが表示されるようになる。

しかし、この方法には問題があって例えばジョブの設定で

mvn package site javancss:report

のように site ゴールと同時に呼び出してしまうと、
規模が2倍に集計されてレポートが生成されてしまう。

[解決策2] Jenkins JavaNCSS プラグインにパッチを当てる

(追記) この作業は不要になりました。詳しくは追記をご参照ください。

Jenkins JavaNCSS プラグインのソースは以下で公開されている
https://svn.jenkins-ci.org/trunk/hudson/plugins/javancss

ここに以下のパッチを当てる。
A patch for Jenkins JavaNCSS Plugin with "mvn site" · GitHub

Index: src/main/java/hudson/plugins/javancss/JavaNCSSMavenPublisher.java
===================================================================
--- src/main/java/hudson/plugins/javancss/JavaNCSSMavenPublisher.java	(revision 39313)
+++ src/main/java/hudson/plugins/javancss/JavaNCSSMavenPublisher.java	(working copy)
@@ -47,8 +47,8 @@
     private static final String PLUGIN_EXECUTE_GOAL = "report";
 
     protected boolean isExecutingMojo(MojoInfo mojo) {
-        return mojo.pluginName.matches(PLUGIN_GROUP_ID, PLUGIN_ARTIFACT_ID)
-                && PLUGIN_EXECUTE_GOAL.equals(mojo.getGoal());
+        return (mojo.pluginName.matches(PLUGIN_GROUP_ID, PLUGIN_ARTIFACT_ID)
+                && PLUGIN_EXECUTE_GOAL.equals(mojo.getGoal())) || "site".equals(mojo.getGoal());
     }
 
     protected Ghostwriter newGhostwriter(MavenProject pom, MojoInfo mojo) {

やっていることは site ゴールが呼び出された場合にも
JavaNCSS のレポートを生成するようにしているだけ。

Jenkins プラグインのビルド方法は
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial を参考に
settings.xml を置いて、$mvn package を実行する。

ビルドが終わったら
Jenkins の管理 > プラグインの管理 > 高度な設定 > プラグインのアップロード から
target/javancss.hpi をアップロードし、Jenkins を再起動する。

まとめ

Jenkins JavaNCSS プラグインは、ソフトウェアの規模が順調に増えていくのが
目で見てわかって楽しいし、コメントの割合が十分であるかもわかるので
パッチを当ててでも有効にするべき!と言えるぐらいオススメ。

2011.06.11 追記

@ さんがパッチを取り込んでくださいましたので Ver.1.1 からはパッチ適用は不要になりました!
JavaNCSS Plugin - Jenkins - Jenkins Wiki