我在.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并且不会导致无限循环?
任务的运行顺序是什么?日志记录输出可能与运行任务的实际顺序不对应。是否有可靠的方法来记录任务运行的顺序?
感谢您的支持!
答案 0 :(得分:0)
当您运行任务时,sbt会计算graph of task dependencies。在此图中,每个任务仅计算一次而不进行递归。但是,设置或任务可能依赖于设置或任务的先前值,也只计算一次。
未指定任务的顺序,但依赖于其他任务的任务将在其依赖项之后运行。独立任务也可以并行运行。如果您需要严格的订购,您需要让他们依赖另一个。
例如:
task2 := task2.dependsOn(task1)