Scala SBT在不退出的情况下停止运行

Scala SBT在不退出的情况下停止运行,scala,sbt,terminate,Scala,Sbt,Terminate,如何在不退出的情况下终止SBT中的跑步 我正在尝试CTRL+C,但它退出SBT。有没有办法在保持SBT打开的同时只退出正在运行的应用程序?在默认配置中,您的运行发生在SBT正在运行的同一个JVM中,因此您无法轻松地分别终止它们 如果您在单独的分叉JVM中运行,如中所述,那么您可以在不影响sbt的JVM的情况下杀死该JVM(通过操作系统提供的任何方式): fork in run := true 当我控制从sbt运行的应用程序的主循环时,我发现以下内容很有用 我告诉sbt在运行应用程序时使用for

如何在不退出的情况下终止SBT中的跑步


我正在尝试CTRL+C,但它退出SBT。有没有办法在保持SBT打开的同时只退出正在运行的应用程序?

在默认配置中,您的运行发生在SBT正在运行的同一个JVM中,因此您无法轻松地分别终止它们

如果您在单独的分叉JVM中运行,如中所述,那么您可以在不影响sbt的JVM的情况下杀死该JVM(通过操作系统提供的任何方式):

fork in run := true

当我控制从sbt运行的应用程序的主循环时,我发现以下内容很有用

我告诉sbt在运行应用程序时使用fork(在build.sbt中):

我还告诉sbt将stdin从sbt shell转发到应用程序(in build.sbt):

最后,在应用程序的主线程中,我等待stdin上的文件结束,然后关闭JVM:

while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
当然,您可以使用任何线程来读取stdin和shutdown,而不仅仅是主线程

最后,启动sbt,可以选择切换到要运行的子项目,运行


现在,当您想要停止该进程时,通过在sbt shell中键入CTRL-D来关闭其stdin。

从sbt版本0.13.5可以添加到build.sbt

cancelable in Global := true
它被定义为“启用(true)或禁用(false)使用CTRL+C中断任务执行的能力”

如果您使用的是Scala 2.12.7+,也可以使用CTRL+C.Reference取消编译

报告了一些错误:

    • 考虑使用。我们在公司里使用它,而且非常方便。 因为你的要求可以通过以下方式实现:

      reStart
      
      reStop
      
      无需配置build.sbt文件

      您可以通过添加以下内容来使用此插件:

      addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
      

      到您的项目/插件。sbt

      我正在尝试这样做。具体来说,我已经实现了:但是当我执行CTRL+C时,sbt仍然存在。我如何只杀死分叉的JVM?使用命令行中的
      kill
      ,或在任务管理器(Windows)中,或强制退出或活动监视器(Mac OS X)中,等等。分叉后,要杀死除sbt之外的所有java,运行:
      kill-9`ps-h | grep java | grep-v sbt启动| grep-v grep | awk{print$1}`
      我喜欢这个想法,但似乎没有帮助。我正在运行sbt 0.13.1并将这一行添加到我的build.sbt文件中..您需要使用CTRL+D来终止
      run
      CTRL+D
      无效。我认为
      CTRL+D
      仅适用于Play framework。
      reStart
      
      reStop
      
      addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")