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

How to parallellize tasks given on the command line

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

所以,我正在使用命令行:

sbt taskA taskB taskC

没问题,但是都是顺序执行的

另一方面,如果我以编程方式将其写入 build.sbt:

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

全部并行执行。

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

目前无法通过命令行执行此操作。

你可以从 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

您可以使用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