Scala 如何在sbt中有条件地调用任务?

Scala 如何在sbt中有条件地调用任务?,scala,sbt,Scala,Sbt,假设taskA是一项繁重的任务,只有在启用该任务时才能调用,并且taskAEnabled是相应的设置键 天真的做法是: val taskAConditional = Def.task { (taskAEnabled, taskA) map { (taskAEnabled, taskA) => if (taskAEnabled) taskA.value } } 由于sbt设计,这将不起作用。由于taskA现在成为taskA Conditional的依赖项,因此无论if逻辑

假设
taskA
是一项繁重的任务,只有在启用该任务时才能调用,并且
taskAEnabled
是相应的设置键

天真的做法是:

val taskAConditional = Def.task {
  (taskAEnabled, taskA) map { (taskAEnabled, taskA) => 
    if (taskAEnabled) taskA.value
  }
}
由于sbt设计,这将不起作用。由于taskA现在成为taskA Conditional的依赖项,因此无论if逻辑如何,它都将被执行(即taskAEnabled将被忽略)


有什么方法可以实现我想要的吗?(我无法更改taskA,因为它是从其他地方导入的)

在sbt 0.13.x中,可以使用动态计算:


我不知道。谢谢。似乎它需要一个else,不知道该放什么(在SBT1.1上)
val taskAConditional = Def.taskDyn {
  if (taskAEnabled.value) Def.task {
     taskA.value // this `.value` macro will extract result of taskA (execute it) only if taskAEnabled.value == true
  } 
}