Как вы завершаете запуск в SBT без выхода?
Я пытаюсь CTRL + C, но он выходит из SBT. Есть ли способ выйти из работающего приложения, не открывая SBT?
Как вы завершаете запуск в SBT без выхода?
Я пытаюсь CTRL + C, но он выходит из SBT. Есть ли способ выйти из работающего приложения, не открывая SBT?
В конфигурации по умолчанию ваши прогоны происходят в той же JVM, что и sbt, поэтому вы не можете просто убить их отдельно.
Если вы выполняете свой запуск в отдельной, разветвленной JVM, как описано в Forking, вы можете убить эту JVM (любым означает, что ваша операционная система предлагает), не затрагивая sbt JVM:
fork in run := true
Из sbt версии 0.13.5 вы можете добавить в свой файл build.sbt
cancelable in Global := true
Он определяется как "Включает (true) или отключает (false) возможность прерывать выполнение задачи с помощью CTRL + C". в Определение ключей
Сообщается о некоторых ошибках:
Я нашел следующее полезным, когда у меня есть контроль над основным циклом запуска приложения из 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.