如何有条件地调用 sbt 中的任务?
How to conditionally invoke a task in sbt?
说taskA
是一个繁重的任务,只有在启用时才应该调用,taskAEnabled
是相应的设置键。
一个天真的方法是:
val taskAConditional = Def.task {
(taskAEnabled, taskA) map { (taskAEnabled, taskA) =>
if (taskAEnabled) taskA.value
}
}
由于 sbt 设计,这将不起作用。由于 taskA 现在成为 taskAConditional 的依赖项,它将被执行而不管 if 逻辑(即 taskAEnabled 将被忽略)。
有什么方法可以实现我想要的吗? (我无法更改 taskA,因为它是从其他地方导入的)
在 sbt 0.13.x 你可以使用动态计算 Def.taskDyn:
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
}
}
说taskA
是一个繁重的任务,只有在启用时才应该调用,taskAEnabled
是相应的设置键。
一个天真的方法是:
val taskAConditional = Def.task {
(taskAEnabled, taskA) map { (taskAEnabled, taskA) =>
if (taskAEnabled) taskA.value
}
}
由于 sbt 设计,这将不起作用。由于 taskA 现在成为 taskAConditional 的依赖项,它将被执行而不管 if 逻辑(即 taskAEnabled 将被忽略)。
有什么方法可以实现我想要的吗? (我无法更改 taskA,因为它是从其他地方导入的)
在 sbt 0.13.x 你可以使用动态计算 Def.taskDyn:
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
}
}