Pio*_*lka 19 sbt playframework
我正在使用SBT和Play Framework.
我创建了一个自定义TaskKey来在我的项目中运行JavaScript测试:
import sbt._
import sbt.Process._
import PlayProject._
object ApplicationBuild extends Build {
val testJsTask = TaskKey[Unit]("testJs", "Run javascript tests.") := {}
val main = PlayProject("xxx", 1.0, Seq())
.settings(defaultScalaSettings: _*)
.settings(testJsTask)
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
我testJsTask总是在有人执行test任务时运行它.
我想它应该是如下:
test in Test <<= (test in Test).dependsOn(testJsTask)
Run Code Online (Sandbox Code Playgroud)
我不知道应该如何准确定义.如何将依赖项添加到现有任务,如"test"或"build"?
UPDATE
在@Christian提出更改之后,构建定义如下所示:
object ApplicationBuild extends Build {
val testJsTask = TaskKey[Unit]("testJs", "Run tests for javascript client.")
def testJs = {}
val main = PlayProject("xxx", 1.0, Seq())
.settings(defaultScalaSettings: _*)
.settings(testJsTask := testJs)
(test in Test) <<= (test in Test) dependsOn (testJs)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,该解决方案也不起作用:
[error] /xxx/project/Build.scala:21: not found: value test
[error] (test in Test) <<= (test in Test) dependsOn (testJs)
[error] ^
[error] one error found
[error] {file:/xxx/project/}default-f468ae/compile:compile: Compilation failed
Run Code Online (Sandbox Code Playgroud)
Chr*_*ian 14
这是一种方法:
定义任务键:
val testJsTask = TaskKey[Unit]("testJs", "Run javascript tests.")
Run Code Online (Sandbox Code Playgroud)
在项目设置中定义任务:
testJsTask <<= testJs
Run Code Online (Sandbox Code Playgroud)
根据它进行测试:
(test in Test) <<= (test in Test) dependsOn (testJs)
Run Code Online (Sandbox Code Playgroud)
testJs可以定义如下:
def testJs = (streams) map { (s) => {
s.log.info("Executing task testJs")
// Your implementation
}
Run Code Online (Sandbox Code Playgroud)
[编辑]您必须在项目设置中定义任务依赖项.对于"正常"项目,您可以通过以下方式执行此操作:
lazy val testProject = Project(
"testProject",
file("testProject"),
settings = defaultSettings ++ Seq(
testJsTask <<= testJs,
(test in Test) <<= (test in Test) dependsOn (testJsTask)
)
)
Run Code Online (Sandbox Code Playgroud)
Jac*_*ski 13
Play 2.2.x使用SBT 0.13(参见Play 2.2中的新功能).这带来了一些组合任务的新方法build.sbt(不需要在project/子目录中使用Scala文件).
如果您碰巧使用Play 2.2.x,您可以build.sbt按如下方式定义任务之间的依赖关系:
lazy val testJsTask = taskKey[Unit]("Run JavaScript tests.")
testJsTask := {
println("Running JavaScript tests...")
java.util.concurrent.TimeUnit.SECONDS.sleep(3)
println("...done.")
}
test in Test := {
testJsTask.value
(test in Test).value
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅SBT官方文档中的任务.