scala - 如何退出 sbt 任务?

标签 scala sbt task actor

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

如何退出 clean 并杀死所有由 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
  }
}

特别感谢SBT stop run without exiting

关于scala - 如何退出 sbt 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538098/

相关文章:

scala - 将函数的标记 HList(记录)映射到其参数类型的记录上

java - 无效或损坏的 sbt-launch-jar 文件

java - 为什么 OpenJDK 不允许我安装 SBT?它检索内存错误

java - 实现定期操作的正确方法

gradle - gradle自定义目标未能建立

scala - 类型别名的伴随对象

java - Play! 中的网页是如何生成的?框架?

sbt - 如何在多模块项目中通过 sbt 调用 npm

redis - acks_late : celery + redis broker/backend

scala - Scala中的Seq和Set有什么区别