我有一个publish
和publishLocal
的从属任务,我希望两者的行为略有不同(例如,不允许实际发布快照版本)。
在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.
答案 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