SBT停止运行而不退出

如何在不退出的情况下终止SBT运行?

我想CTRL + C,但它退出SBT。 有没有办法在保持SBT打开的情况下退出正在运行的应用程序?

在默认的configuration中,你的运行发生在运行的同一个JVM中,所以你不能轻易的分别杀死它们。

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

 fork in run := true 

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

 cancelable in Global := true 

它被定义为“启用(true)或禁用(false)用CTRL + C中断任务执行的能力”。 在Keys定义中

有一些错误报告:

当我控制从sbt运行的应用程序的主循环时,我发现下面的代码很有用。

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

 fork in run := true 

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

 connectInput in run := true 

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

 while (System.in.read() != -1) {} logger.warn("Received end-of-file on stdin. Exiting") // optional shutdown code here System.exit(0) 

当然,你可以使用任何线程来读取stdin和shutdown,而不仅仅是主线程。

最后,启动sbt,可select切换到要运行的子项目,运行。

现在,当你想停止进程时,通过在sbt shell中inputCTRL-D来closuresstdin。