如何防止sbt在会话中多次运行任务?

时间:2014-06-18 07:00:03

标签: sbt

我想在sbt运行时阻止以下任务多次运行:

val myTask = someSettings map {s => if !s.isDone doSomethingAndSetTheFlag}

因此,当myTask第一次运行时,预期会是什么,isDone为false并且在任务中完成了某些操作,然后该任务将标志设置为true。但是当第二次运行任务时,由于isDone标志为true,它会跳过实际的执行块。

预期的行为类似于compile - >编译源代码时,任务在下次触发时不会再次编译代码,直到watchSource任务显示代码已更改为止。

有可能吗?怎么样?

1 个答案:

答案 0 :(得分:2)

这是由sbt完成的,任务将在一次运行中仅评估一次。如果您希望在项目加载时评估一次值,则可以将其更改为SettingKey

这在sbt documentation中有记载(突出显示是我的):

  

如简介中所述,任务按需评估。每   调用time sampleTask,例如,它将打印总和。如果   运行时用户名更改,stringTask将采用不同的值   在那些单独的运行中。 (在运行中,每个任务的评估时间为   大多数情况一次。)相反,在项目负载时评估设置一次   并固定,直到下次重新加载。

相关问题