我有另一种方法来完成现有的昂贵任务,但是如果我以这种方式做到这一点,我直到运行时才会知道。 (例如,文件缓存。)
我该怎么做?
例如,packageBin:
packageBin in Compile := Def.taskDyn {
if (canDoItMyWay) {
doItMyWayTask
} else {
Defaults.packageTask
}
}.value
如果它执行后一条路径,则不起作用:
$ sbt packageBin
[trace] Stack trace suppressed: run last compile:packageBin for the full output.
[error] (util-2_10/compile:packageBin) sbt.Init$RuntimeUndefined: References to undefined settings at runtime.
答案 0 :(得分:0)
以下内容适用于我:
val canDoItMyWay: Boolean = ...
//regular method. Not a task
def doItMyWay: File = ...
packageBin in Compile := {
if(canDoItMyWay) doItMyWay
else (packageBin in Compile).value
}
这里不需要使用动态任务。
请注意.value
仅适用于sbt 0.13 +
另外,请注意我没有使用特殊的Task
。只是常规代码。通过名称判断:doItMyWayTask
表示您定义了一个任务。如果您使用自定义任务,则:
packageBin