如何依赖于基于动态条件的不同子任务,在sbt中

时间:2017-01-31 18:01:46

标签: sbt

我有一个publishpublishLocal的从属任务,我希望两者的行为略有不同(例如,不允许实际发布快照版本)。

sbt API中是否有一种方法可以从依赖内部中嗅出最顶层的任务?

我试过了:

def pick: TaskKey[Unit] = {
  if (isSnapshot.value) {
    aTask
  } else {
    bTask  // the one `publish` is dependent on
  }
}

这会为publishLocal选择正确的依赖关系,但sbt不允许这样做:

/Users/akauppi/Git/boots-akka-http/stups.sbt:140: error: `value` can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting.

1 个答案:

答案 0 :(得分:2)

您需要使用动态任务(Def.Initialize[Task[T]])。试试这个:

def pick: Def.Initialize[Task[Unit]] = Def.taskDyn {
  if (isSnapshot.value) {
    aTask
  } else {
    bTask
  } 
}

您可以使用Task[T]直接初始化Def.Initialize[Task[T]]

lazy val pickTask = Def.taskKey[Unit]("Run the picked task.")

pickTask := pick