SBT:创建一个任务说runAll来运行所有子模块的主类

时间:2017-06-22 10:19:19

标签: scala sbt

我有一个像这样的多项目模块

JSON

我想实现一个runAll sbt任务,以便我可以在不同的jvm中运行所有主类

##注意:可以有任意数量的子模块

2 个答案:

答案 0 :(得分:0)

最好的想法是从build.sbt任务中调用shell脚本,如此

val searchPackage = taskKey[Unit]("SearchPackage")
searchPackage := {
  Seq("./run_all_main_class.sh" !)
}

您可以在该shell脚本中添加所有类,有点像这样

run_all_main_class.sh看起来像这样,你可以根据需要自定义这个shell脚本。

#!/usr/bin/env bash

nohup sbt "runMain com.something.MainClass1" &
nohup sbt "runMain com.something.MainClass2" &

答案 1 :(得分:0)

有点晚了,但可能会对其他有相同问题的人有所帮助。这是我的解决方法。

build.sbt:

lazy val runAll = taskKey[Unit]("run-all, for running all main classes")

def runAllIn(config: Configuration) = Def.task {
    val s = streams.value
    val cp = (fullClasspath in config).value
    val r = (runner in run).value
    (discoveredMainClasses in config).value.foreach(c =>
      r.run(c, cp.files, Seq(), s.log))
}

// For the target project that you intend to run "runAll"
lazy val example = (project in file("example"))
  .settings(runAll := runAllIn(Compile).value)