【问题标题】:How to conditionally invoke a task in sbt?如何有条件地调用 sbt 中的任务?
【发布时间】:2015-04-01 14:45:23
【问题描述】:

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

一种天真的方法是:

val taskAConditional = Def.task {
  (taskAEnabled, taskA) map { (taskAEnabled, taskA) => 
    if (taskAEnabled) taskA.value
  }
}

由于 sbt 设计,这将不起作用。由于 taskA 现在成为 taskAConditional 的依赖项,因此无论 if 逻辑如何都会执行它(即 taskAEnabled 将被忽略)。

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

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    在 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
      } 
    }
    

    【讨论】:

    • 不知道。谢谢。
    • 似乎需要一个 else,不知道该放什么(在 sbt 1.1 上)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2020-05-13
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多