在SBT中定义复合任务

时间:2016-07-19 00:23:19

标签: scala sbt

我想在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任务取决于所提到的所有任务。

1 个答案:

答案 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" ::
  _
}