如何将checkstyle和PMD集成到Play框架Build.scala文件中

Phi*_*son 3 scala checkstyle pmd sbt playframework-2.0

我正在尝试将Checkstyle和PMD集成到Play框架中.我首先使用ymasory创建的giter8模板生成一个示例build.scala文件,该文件支持sbt控制台中的checkstyle和pmd命令.这工作正常,我已将结果项目上传到github:

https://github.com/ics-software-engineering/sbt-example-qa

当我尝试将此代码与Play new命令创建的Build.scala文件一起使用时,会出现此问题.giter8模板使用'settings'值集成checkstyle和pmd,如此处所示(请参阅整个定义的实际文件):

object ProjectBuild extends Build {

  val main = Project(
    "sbt-example-qa",
    new java.io.File("."),
    settings = Defaults.defaultSettings ++ ProjectSettings.all
  )
}
Run Code Online (Sandbox Code Playgroud)

另一方面,'play new'命令生成的Build.scala文件具有不同的结构:

object ApplicationBuild extends Build {

  val appName         = "play-example-qa"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    // Add your project dependencies here,
    javaCore,
    javaJdbc,
    javaEbean
  )

  val main = play.Project(appName, appVersion, appDependencies).settings(
    // Add your own project settings here  
  )
}
Run Code Online (Sandbox Code Playgroud)

具体来说,'play new'创建的Build.scala文件定义了一个play.Project而不是一个由giter8模板创建的Project.

我在"在这里添加我自己的项目设置"以使Checkstyle和PMD进入Play项目的所有尝试都失败了,语法错误如下:

[info] Loading project definition from /Users/johnson/projecthosting/github/play-  example-qa/project
[error] /Users/johnson/projecthosting/github/play-example-qa/project/Build.scala:17:   overloaded method value settings with alternatives:
[error]   (ss: sbt.Project.Setting[_]*)sbt.Project <and>
[error]   => Seq[sbt.Project.Setting[_]]
[error]  cannot be applied to (settings: Seq[sbt.Project.Setting[_]])
[error]   val main = play.Project(appName, appVersion, appDependencies).settings(
[error]                                                                 ^
[error] one error found
[error] (compile:compile) Compilation failed
Run Code Online (Sandbox Code Playgroud)

供您参考,以下是我试图创建的示例Play项目,它合并了giter8模板:

https://github.com/ics-software-engineering/play-example-qa

有人可以解释如何在这个项目中修改Build.scala,以便Play控制台能够以类似于giter8模板的方式接受"checkstyle"和"pmd"命令吗?也许是通过分支play-example-qa项目并修复Build.scala?我打算将Play代码提供给Play社区以供将来参考.提前致谢.

Yuv*_*ory 5

我已经创建了一个GitHub回购来回答你的问题.

您可以从该项目开始,或手动执行以下步骤以使我的giter8模板适应Play:

  1. 首先制作一个新的Play项目play new foo,为Java选择2.
  2. 把模板的pmd-ruleset.xml,并checkstyle-config.xml在播放project目录.
  3. object ProjectSettings模板中的内容复制project/build.scala到Play中project/Build.scala.
  4. 将模板的内容添加project/plugins.sbt到Play中project/plugins.sbt,记住在粘贴前留空行.
  5. 最后,将Play更改project/build.scala为实际使用ProjectSettings.all的模板:

    
    val main = play.Project(appName, appVersion, appDependencies).settings(
      ProjectSettings.all: _*
    )
    
    Run Code Online (Sandbox Code Playgroud)