gpt4 book ai didi

scala - 使用不同的设置运行 sbt 任务两次

转载 作者:行者123 更新时间:2023-12-05 05:03:48 27 4
gpt4 key购买 nike

我如何运行一个任务两次,第一次使用 build.sbt 中定义的设置,第二次使用其他设置?代码将是这样的:

val childSetting = settingKey[String]("Some setting")

val childTask = taskKey[String]("Child task")

childTask := ???

val parentTask = taskKey[String]("Parent task")

parentTask := {
val initial = childTask.value
// Do some stuff
// Run childTask again with different setting
// Do other stuff
}

最佳答案

sbt deduplicates任务,例如,给出 parentTask

的以下定义
val childSetting = settingKey[String]("Some setting")
childSetting := "Live long and prosper"

val childTask = taskKey[String]("Child task")
childTask := {
val x = childSetting.value
println(x)
x
}

val parentTask = taskKey[String]("Parent task")
parentTask := {
val initial = childTask.value
val another = childTask.value
initial
}

看起来我们在

中执行了两次 childTask
parentTask := {
val initial = childTask.value
val another = childTask.value
initial
}

无论如何执行sbt parentTask我们都会看到副作用println(x)输出

Live long and prosper

只有一次。所以看起来我们不能简单地使用 value 宏,这是执行任务的推荐方式。尝试像这样使用 runTask

parentTask := {
val st = state.value
val extracted = Project.extract(st)
val (st2, initial) = extracted.runTask(childTask, st)
val st3 = extracted.appendWithSession(Seq(childSetting := "nuqneH"), st2)
val (st4, another) = Project.extract(st3).runTask(childTask, st3)
another
}

现在执行 sbt parentTask 会运行 println(x) 两次 childTask 的副作用,每次都有不同的状态

Live long and prosper
...
nuqneH

但是,不推荐直接使用 runTask 执行任务,因为它 bypasses sbt的优势

Invoking the task directly would do an end run around the dependency system, the parallel execution system, etc.

并可能导致 race conditions

Be careful with runTask. It executes outside of sbt's task graph. Can lead to race conditions, etc. See: sbt/sbt#2970

或者尝试定义一个命令,尽管命令的用法类似 discouraged ,例如,给定

commands += Command.command("foo") { state =>
"childTask" :: """set childSetting := "nuqneH"""" :: "childTask" :: state
}

执行 sbt foo 输出

Live long and prosper
...
nuqneH

我们在哪里看到 childTask 执行两次的 println(x) 副作用。

关于scala - 使用不同的设置运行 sbt 任务两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61465210/

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