Jenkins + Maven で JavaNCSS プラグインを使う
Jenkins で Java プロジェクトを継続的インテグレーションする際に
規模を計測するのに JavaNCSS が便利である。
JavaNCSS とは?
JavaNCSS の NCSS は Non Commenting Source Statements の略で
ソースコードの行のうちコメント(や空行)でない行のことである。
JavaNCSS を使えば、個人のコーディングスタイルに左右されずに
本質的な規模を計測することができる。
Jenkins + Maven で使う場合の問題点
Jenkins 上で Maven プロジェクトで使おうとすると問題がある。
Jenkins のジョブの設定で
mvn package site
としても、レポートが表示されない。
Checkstyle や FindBugs では出るのに、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 追記
@ssogabe さんがパッチを取り込んでくださいましたので Ver.1.1 からはパッチ適用は不要になりました!
JavaNCSS Plugin - Jenkins - Jenkins Wiki