根据sbt任务运行

时间:2017-03-26 11:21:28

标签: scala sbt

我在.sbt文件中有简单的任务task1和task2然后我通过两次不同的时间重新分配task2使task2依赖于task1:

index()

当我加载sbt并运行它们时,我得到以下输出:

val task1 = taskKey[String]("task1 original")
val task2 = taskKey[String]("task2 original")

task1 := {
  val log = streams.value.log
  log.error("task1 original output")
  "task1 original output"
}
task2 := {
  val log = streams.value.log
  log.error("task2 original output")
  "task2 original output"
}

task2 := {
  val log = streams.value.log
  log.error("task2 chain1 before task1.value")
  val x = task1.value
  log.error("task2 chain1 before task2.value")
  task2.value
}

task2 := {
  val log = streams.value.log
  log.error("task2 chain2 before task1.value")
  val x = task1.value
  log.error("task2 chain2 before task2.value")
  val y = task2.value
  log.error("task2 chain2 before task2.value")
  task2.value
}

为什么这样看起来像?为什么task2调用较旧的task2 assignements并且不会导致无限循环?

任务的运行顺序是什么?日志记录输出可能与运行任务的实际顺序不对应。是否有可靠的方法来记录任务运行的顺序?

感谢您的支持!

1 个答案:

答案 0 :(得分:0)

当您运行任务时,sbt会计算graph of task dependencies。在此图中,每个任务仅计算一次而不进行递归。但是,设置或任务可能依赖于设置或任务的先前值,也只计算一次。

未指定任务的顺序,但依赖于其他任务的任务将在其依赖项之后运行。独立任务也可以并行运行。如果您需要严格的订购,您需要让他们依赖另一个。

例如:

task2 := task2.dependsOn(task1)