如何并行化命令行上给出的任务
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
我希望能够在 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