gpt4 book ai didi

sbt - 如何有条件地执行 SBT 任务

转载 作者:行者123 更新时间:2023-12-01 06:25:34 26 4
gpt4 key购买 nike

我有另一种方法来完成现有的昂贵任务,尽管我直到运行时才知道我是否会这样做。 (例如,文件缓存。)

我该怎么做呢?

例如,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.

最佳答案

以下对我有用:

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
  • 关于sbt - 如何有条件地执行 SBT 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220789/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com