PlayもSBTもよくわかっていない初心者がPlayFramework2.3(Java)プロジェクトの品質管理に取り組んだメモ。
Play2.2で苦労して作り上げた設定は見事撃沈。
PlayFramework2.2でCheckStyle,FindBugs,JaCoCo,PMD,CPDのレポート出力
やりたい事
PlayFramework2.3(Java)で作成したソースに対して下記レポート出力する。
JenkinsのJobでも同様のレポートを出力し、表示できるようにする。
- CheckStyle
- FindBugs
- JaCoCo
- PMD
- CPD
※JDK1.7対象
project/plugins.sbtの編集
※改行を挟まないと有効にならない箇所があるので注意。
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
resolvers += "sbt community repository" at "http://dl.bintray.com/sbt/sbt-plugin-releases/"
resolvers += "corux-releases" at "http://tomcat.corux.de/nexus/content/repositories/releases/"
resolvers += "corux-snapshots" at "http://tomcat.corux.de/nexus/content/repositories/snapshots/"
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.4")
// web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.0.0")
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.3")
addSbtPlugin("de.johoop" % "jacoco4sbt" % "2.1.6")
addSbtPlugin("de.johoop" % "findbugs4sbt" % "1.3.0")
addSbtPlugin("de.johoop" % "cpd4sbt" % "1.1.5")
addSbtPlugin("de.johoop" % "sbt-testng-plugin" % "3.0.2")
addSbtPlugin("de.corux" %% "sbt-code-quality" % "0.2.0")
libraryDependencies ++= Seq(
"net.sourceforge.pmd" % "pmd" % "5.1.3" exclude("org.ow2.asm", "asm")
)
##プロジェクトフォルダ直下にbuild.sbtファイルを作成する。
name := "example-project"
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
scalaVersion := "2.11.1"
jacoco.settings
findbugsSettings
cpdSettings
cpdLanguage := de.johoop.cpd4sbt.Language.Java
testNGSettings
codequality.CodeQualityPlugin.Settings
###ハマりどころ~CheckStyle編~
Play2.2では動いていたsbt-checkstyle-pluginがうまく動かず。
色々試してみたが解決できず、CheckStyleをかけてくれる別のプラグインを発見。
sbt-code-qualityに変えてみたら出力された。
CheckStyleのルールセットはプロジェクト直下にcheckstyle-config.xmlという名前で保存する。
(名前は変えられるらしい)
使用したsbtプラグイン
https://github.com/corux/sbt-code-quality
これ1つでCheckStyleとPMDを実行できる。
CheckStyle実行すると下記エラー発生。
[error] (*:checkstyle) java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSortedSet.of([Ljava/lang/Comparable;)Lcom/google/common/collect/ImmutableSortedSet;
CheckStyle5.5とPlay2.2(以降?)で起きる不具合らしい。
checkstyle-config.xml内のJavaDocstyleのチェックをコメントにすることでとりあえず解消。
###ハマりどころ~PMD編~
activator pmd
を実行すると、java.lang.IncompatibleClassChangeErrorが出てpmd.xmlが0バイトで作成される。
project/plugins.sbt
に下記記述を追加することで解決した。
libraryDependencies ++= Seq(
"net.sourceforge.pmd" % "pmd" % "5.1.3" exclude("org.ow2.asm", "asm")
)
PMDのルールセットはプロジェクト直下にpmd-ruleset.xmlという名前で保存する。
###ハマりどころ~CPD編~
Play2.2に引き続き、CPDを実行しても出力されるレポートが0byte。
今回は諦めずに挑戦。
CPDプラグインがデフォルトでチェックする言語はScalaになっている?という可能性に気付き、言語設定を適当に入れてみたら出力された。
cpdLanguage := de.johoop.cpd4sbt.Language.Java
##Jenkinsの設定
####ビルド→シェルの実行
cd ${WORKSPACE}/example
activator jacoco:cover
activator checkstyle
activator findbugs
activator pmd
activator cpd
####ビルド後の処理
- Checkstyle警告の集計
example/target/checkstyle-result.xml
- Findbugs警告の集計
example/target/scala-2.11/findbugs/report.xml
- PMD警告の集計
example/target/pmd.xml
- 重複コード分析の集計
example/target/scala-2.11/cpd/cpd.xml
#まとめ
育ちざかりのフレームワークについていけない。
Play2.2での設定がうまく動くまでと同じくらい時間がかかった。
レポートの出力はできるようになったが、出力されたレポートの内容までは確認できていない。
色々調整が必要かも。
参考URL
https://www.playframework.com/documentation/2.3.x/Migration23