我正在尝试将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
供您参考,以下是我试图创建的合并giter8模板的Play项目示例:
https://github.com/ics-software-engineering/play-example-qa
有人可以解释如何修改此项目中的Build.scala,以便Play控制台能够以类似于giter8模板的方式接受“checkstyle”和“pmd”命令吗?也许是通过分支play-example-qa项目并修复Build.scala?我打算将Play代码提供给Play社区以供将来参考。提前致谢。
答案 0 :(得分:5)
我创建了一个GitHub repo来回答您的问题。
您可以从该项目开始,或手动按照以下步骤调整我的giter8 template进行播放:
play new foo
创建一个新的Play项目,为Java选择2。pmd-ruleset.xml
和checkstyle-config.xml
放入Play project
目录。object ProjectSettings
从模板的project/build.scala
复制到Play的project/Build.scala
。project/plugins.sbt
的内容添加到Play的project/plugins.sbt
,记住在粘贴前留空行。最后,将播放project/build.scala
更改为实际使用模板中的ProjectSettings.all
:
val main = play.Project(appName, appVersion, appDependencies).settings(
ProjectSettings.all: _*
)