3

我正在尝试将 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
  )
}

另一方面,“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  
  )
}

具体来说,由“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

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

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

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

4

1 回答 1

5

我创建了一个GitHub 存储库来回答您的问题。

您可以从该项目开始,或手动按照以下步骤调整我的giter8 模板以适应 Play:

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

    
    val main = play.Project(appName, appVersion, appDependencies).settings(
      ProjectSettings.all: _*
    )
    
于 2013-06-05T21:02:38.693 回答