我想在sbt运行时阻止以下任务多次运行:
val myTask = someSettings map {s => if !s.isDone doSomethingAndSetTheFlag}
因此,当myTask第一次运行时,预期会是什么,isDone为false并且在任务中完成了某些操作,然后该任务将标志设置为true。但是当第二次运行任务时,由于isDone标志为true,它会跳过实际的执行块。
预期的行为类似于compile - >编译源代码时,任务在下次触发时不会再次编译代码,直到watchSource任务显示代码已更改为止。
有可能吗?怎么样?
答案 0 :(得分:2)
这是由sbt完成的,任务将在一次运行中仅评估一次。如果您希望在项目加载时评估一次值,则可以将其更改为SettingKey。
这在sbt documentation中有记载(突出显示是我的):
如简介中所述,任务按需评估。每 调用time sampleTask,例如,它将打印总和。如果 运行时用户名更改,stringTask将采用不同的值 在那些单独的运行中。 (在运行中,每个任务的评估时间为 大多数情况一次。)相反,在项目负载时评估设置一次 并固定,直到下次重新加载。