10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Play Framework 2.3でCheckStyle,FindBugs,JaCoCo,PMD,CPDのレポート出力

Last updated at Posted at 2014-10-23

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の編集

※改行を挟まないと有効にならない箇所があるので注意。

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ファイルを作成する。

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")
)

参考URL
http://stackoverflow.com/questions/26260616/why-does-play-2-3-4-and-jacoco4sbt-2-1-4-fail-with-nosuchmethoderror

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

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?