我想在sbt中定义一个复合任务,以便在我的CI作业中运行的所有任务都可以在一个命令中执行。例如,在我正在运行的那一刻:
struct
但是,我想运行
clean coverage test scalastyle coverageReport package
这实际上是所有上述任务的别名。此外,我想在scala文件中定义它(而不是build.sbt),所以我可以将它包含在一个已经存在的公共scala插件中,因此它对我的所有项目都是有用的。
到目前为止(经过多次阅读文档)我已经成功完成了一项仅依赖于scalastyle的任务:
ci
但是,如果我尝试添加另一个任务(比如发布任务),例如:
lazy val ci = inputKey[Unit]("Prints 'Runs All tasks for CI")
ci := {
val scalastyleResult = (scalastyle in Compile).evaluated
println("In the CI task")
}
这失败了:
ci := {
val scalastyleResult = (scalastyle in Compile).evaluated
val publishResult = (publish in Compile).evaluated
println("In the CI task")
}
我的第一个问题是这种方法是否确实是定义复合任务的正确方法。
如果是这种情况,那么我如何使ci任务取决于所提到的所有任务。
答案 0 :(得分:2)
lazy val ci = inputKey[Unit]("Prints 'Runs All tasks for CI")
ci := {
在陈述之间加上空格
lazy val ci = inputKey[Unit]("Prints 'Runs All tasks for CI")
ci := {
另外,要知道SBT将并行运行ci的依赖任务。有时这很好,但并非总是如此,例如你的干净。
有几种方法可以按顺序运行任务。
一种方式:
commands += Command.command("ci") {
"clean" ::
"coverage" ::
"test" ::
"scalastyle" ::
"coverageReport" ::
_
}