关于Scala:如何退出sbt任务?

How to exit a sbt task?

我运行一个sbt任务。 完成后的正常情况下,它应该在终端中停止。 但是终端不等待下一个输入的意思:我的任务一直在运行。 我假设在任务启动它们之后没有退出一些被调用的线程。

如何退出clean并杀死sbt任务启动的所有进程?
我可以调试哪个服务没有停止,但是要花很长时间才能弄清楚。

更多细节

在build.sbt中

1
2
lazy val refreshTranslations = taskKey[Unit]("blabla")
fullRunTask(refreshTranslations, Compile,"tasks.TranslationTask")

在任务中

1
2
3
4
5
6
7
8
object TranslationTask {

  def main(args: Array[String]): Unit = {
    // background stuff with ActorSystem() , AhcWSClient()
    Await.result(service.get, 20.seconds)
    ...
  }
}


我找到了一种在SBT任务完成后退出ActorSystem的方法。

在build.sbt中,在其他线程中启动任务。

1
2
3
lazy val refreshTranslationsFallback = taskKey[Unit]("Refresh the translations file fallback")
fullRunTask(refreshTranslationsFallback, Compile,"tasks.TranslationTask")
fork in refreshTranslationsFallback := true

在任务中

1
2
3
4
5
6
7
8
object TranslationTask {

  def main(args: Array[String]): Unit = {
    // background stuff with ActorSystem() , AhcWSClient()
    ...
    scala.sys.exit() // important
  }
}

特别感谢SBT在不退出的情况下停止运行