5
5

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.

PlayFramework2.2でCheckStyle,FindBugs,JaCoCo,PMD,CPDのレポート出力

Last updated at Posted at 2014-10-23

PlayもSBTもよくわかっていない初心者がPlayFramework2.2(Java)プロジェクトの品質管理に取り組んだメモ。

下記を参考にさせていただきました。
http://qiita.com/mychaelstyle/items/da627864247472bb94c5

やりたい事

PlayFramework2.2(Java)で作成したソースに対して下記レポート出力する。
JenkinsのJobでも同様のレポートを出力し、表示できるようにする。

  • CheckStyle
  • FindBugs
  • JaCoCo
  • PMD
  • CPD

※JDK1.7対象

project/plugins.sbtの編集

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

project/plugins.sbt
// Comment to get more information during initialization
logLevel := Level.Warn

// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

resolvers += "sbt community repository" at "http://dl.bintray.com/sbt/sbt-plugin-releases/"

libraryDependencies ++= Seq(
  "com.puppycrawl.tools" % "checkstyle" % "5.5",
  "net.sourceforge.pmd" % "pmd" % "5.1.3"
)

// 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.4")

addSbtPlugin("de.johoop" % "sbt-testng-plugin" % "3.0.2")

addSbtPlugin("com.etsy" % "sbt-checkstyle-plugin" % "0.4.0")

##プロジェクトフォルダ直下にbuild.sbtファイルを作成する。

build.sbt
name := "Example-Project"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  filters,
  javaEbean,
  "org.webjars" % "bootstrap" % "3.0.0",
  "org.webjars" %% "webjars-play" % "2.2.0",
  "mysql" % "mysql-connector-java" % "5.1.24"
)

play.Project.playJavaSettings

jacoco.settings

findbugsSettings

cpdSettings

testNGSettings

com.etsy.sbt.Checkstyle.checkstyleSettings

resolvers += "webjars" at "http://webjars.github.com/m2"

Checkstyleのルールセットはプロジェクト直下にcheckstyle-config.xmlという名前で保存する。
(ファイル名は変えられるらしいが、よくわからなかったのでデフォルト)

使用したプラグインのURL
https://github.com/etsy/sbt-checkstyle-plugin

##Build.scalaを作ってPMDを実行する。
project/pmd-ruleset.xmlにPMDのルールセットを用意する。

 project/Build.scala
import sbt._
import Keys._
import play.Project._
import de.johoop.jacoco4sbt._
import JacocoPlugin._
import de.johoop.findbugs4sbt._
import de.johoop.findbugs4sbt.FindBugs._
import de.johoop.cpd4sbt.CopyPasteDetector._

object ApplicationBuild extends Build {

  val appName         = "Example-Project"
  val appVersion      = "1.0-SNAPSHOT"

  val main = play.Project(appName, appVersion).settings(
    ProjectSettings.all: _*
  )
}

object ProjectSettings {

  def all: Seq[sbt.Project.Setting[_]] = List(
    PmdSettings.all
  ).flatten

  object PmdSettings {

    val pmd = TaskKey[Unit]("pmd", "run PMD")
    val pmdTask = pmd <<=
      (streams, baseDirectory, sourceDirectory in Compile, target) map {
        (streams, base, src, target) =>
        import net.sourceforge.pmd.PMD.{ main => PmdMain }
        import streams.log

        val args = List(
          "-d",
          src.getAbsolutePath,
          "-f",
          "xml",
          "-R",
          (base / "project/pmd-ruleset.xml").getAbsolutePath,
          "-reportfile",
          (target / "scala-2.10/pmd.xml").getAbsolutePath
        )

        log info ("using pmd args " + args)
        trappingExits {
          PmdMain(args.toArray)
        }
      }
      val all = Seq(pmdTask)
  }

  def trappingExits(thunk: => Unit): Unit = {
    val originalSecManager = System.getSecurityManager
    case class NoExitsException() extends SecurityException
    System setSecurityManager new SecurityManager() {
      import java.security.Permission
      override def checkPermission(perm: Permission) {
        if (perm.getName startsWith "exitVM") throw NoExitsException()
      }
    }
    try {
      thunk
    } finally {
      System setSecurityManager originalSecManager
    }
  }
}

##Jenkinsの設定

####ビルド→シェルの実行

PLAY_HOME=/usr/local/play-2.2.4

cd ${WORKSPACE}/example
${PLAY_HOME}/play jacoco:cover
${PLAY_HOME}/play checkstyle
${PLAY_HOME}/play findbugs
${PLAY_HOME}/play pmd

####ビルド後の処理
Checkstyle警告の集計

example/target/checkstyle-report.xml

Findbugs警告の集計

example/target/scala-2.10/findbugs/report.xml

PMD警告の集計

example/target/scala-2.10/pmd.xml

まとめ

とにかく情報があまりないので、知識不足と相まっていちいちハマる。
CPDレポートは出力されるが0byteという問題を解決できず。

ようやくレポートが出るようになったところで、Playを2.3に上げることに。。

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

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?