我希望能够在SBT中动态执行某些任务。
所以,我使用命令行:
sbt taskA taskB taskC
它运作正常,但所有这些都按顺序执行。
另一方面,如果我以编程方式在build.sbt
:
val allTasks = taskKey[Unit]("All")
allTasks := {
taskA.value
taskB.value
taskC.value
}
所有这些都是并行执行的。
如何在命令行中获得此行为?
答案 0 :(得分:1)
您可以使用all
命令:
<强> build.sbt 强>
TaskKey[String]("taskA") := { println("A start"); Thread.sleep(3000); println("A end"); "a" }
TaskKey[String]("taskB") := { println("B start"); Thread.sleep(2000); println("B end"); "b" }
TaskKey[String]("taskC") := { println("C start"); Thread.sleep(1000); println("C end"); "c" }
运行它:
> all taskA taskB taskC
C start
A start
B start
C end
B end
A end
答案 1 :(得分:0)
目前无法从命令行进行此操作。
你可以从sbt shell做的一件事就是动态定义一个任务然后运行它:
$ set TaskKey[Unit]("allTasks") := { val a = taskA.value ; val b = taskB.value ; val c = taskC.value ; () }
[info] Defining *:allTasks
$ allTasks
[info] Running Task A in parallel
[info] Running Task B in parallel
[info] Running Task C in parallel