Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何退出sbt任务?_Scala_Sbt_Task_Actor - Fatal编程技术网

Scala 如何退出sbt任务?

Scala 如何退出sbt任务?,scala,sbt,task,actor,Scala,Sbt,Task,Actor,我运行一个sbt任务。正常情况完成后,应在终端停止。但是终端并没有等待下一个输入意味着:我的任务一直在运行。我假设一些被调用的线程在任务启动后没有退出 如何退出清除并终止sbt任务启动的所有进程? 我可以调试哪个服务没有停止,但需要很长时间才能弄清楚 更多细节 在build.sbt中 lazy val refreshTranslations = taskKey[Unit]("blabla") fullRunTask(refreshTranslations, Compile, "tasks.Tra

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

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

更多细节

在build.sbt中

lazy val refreshTranslations = taskKey[Unit]("blabla")
fullRunTask(refreshTranslations, Compile, "tasks.TranslationTask")
在任务中

object TranslationTask {

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

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

在build.sbt中,在不同的线程中启动任务

lazy val refreshTranslationsFallback = taskKey[Unit]("Refresh the translations file fallback")
fullRunTask(refreshTranslationsFallback, Compile, "tasks.TranslationTask")
fork in refreshTranslationsFallback := true
在任务中,

object TranslationTask {

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

特别感谢

您在终端中尝试过crtl+d吗?我知道如何使用cmd+C退出终端。我在SBT中特别要求。您的任务是运行外部定义的函数吗?为什么不定义它并将其作为常规任务运行呢?这与此相关:akka ActorSystem使用非守护进程线程。您需要在JVM退出之前调用ActorSystem。在sbt中,您可能希望以一种简单的方式实现这一点。