如何并行化命令行上给出的任务

时间:2015-05-12 08:30:40

标签: sbt

我希望能够在SBT中动态执行某些任务。

所以,我使用命令行:

sbt taskA taskB taskC

它运作正常,但所有这些都按顺序执行。

另一方面,如果我以编程方式在build.sbt

中写入
val allTasks = taskKey[Unit]("All")
allTasks := {
  taskA.value
  taskB.value
  taskC.value
}

所有这些都是并行执行的。

如何在命令行中获得此行为?

2 个答案:

答案 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