SBT остановка без выхода

Как вы завершаете запуск в SBT без выхода?

Я пытаюсь CTRL + C, но он выходит из SBT. Есть ли способ выйти из работающего приложения, не открывая SBT?

Ответ 1

В конфигурации по умолчанию ваши прогоны происходят в той же JVM, что и sbt, поэтому вы не можете просто убить их отдельно.

Если вы выполняете свой запуск в отдельной, разветвленной JVM, как описано в Forking, вы можете убить эту JVM (любым означает, что ваша операционная система предлагает), не затрагивая sbt JVM:

fork in run := true

Ответ 2

Из sbt версии 0.13.5 вы можете добавить в свой файл build.sbt

cancelable in Global := true

Он определяется как "Включает (true) или отключает (false) возможность прерывать выполнение задачи с помощью CTRL + C". в Определение ключей

Сообщается о некоторых ошибках:

Ответ 3

Я нашел следующее полезным, когда у меня есть контроль над основным циклом запуска приложения из sbt.

Я говорю sbt для fork при запуске приложения (в build.sbt):

fork in run := true

Я также передаю sbt для пересылки stdin из оболочки sbt в приложение (в build.sbt):

connectInput in run := true

Наконец, в основном потоке приложения, я жду окончания файла на 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, возможно, переключитесь на подпроект, который вы хотите запустить, запустите.

Теперь, когда вы хотите остановить процесс, закройте его stdin, набрав CTRL-D в оболочке sbt.