Как завершить пробежку в SBT, не выходя из нее?
Я пытаюсь CTRL + C, но он выходит из SBT. Есть ли способ выйти только из работающего приложения, оставив SBT открытым?
Ctrl + D
работает только для фреймворка Play.
Как завершить пробежку в SBT, не выходя из нее?
Я пытаюсь CTRL + C, но он выходит из SBT. Есть ли способ выйти только из работающего приложения, оставив SBT открытым?
Ctrl + D
работает только для фреймворка Play.
Ответы:
В конфигурации по умолчанию ваши запуски происходят в той же JVM, что и sbt, поэтому вы не можете легко убить их по отдельности.
Если вы выполняете свой запуск в отдельной разветвленной JVM, как описано в Forking , вы можете убить эту JVM (любыми способами, предлагаемыми вашей операционной системой), не затрагивая JVM sbt:
fork in run := true
kill
из командной строки, или в диспетчере задач (Windows), или
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
помощью CTRL + D
Из sbt версии 0.13.5 вы можете добавить в свой build.sbt
cancelable in Global := true
Он определяется как «Разрешает (истина) или отключает (ложь) возможность прерывания выполнения задачи с помощью CTRL + C». в определении ключей
Если вы используете Scala 2.12.7+, вы также можете отменить компиляцию с помощью CTRL + C. Ссылка https://github.com/scala/scala/pull/6479
Сообщается о некоторых ошибках:
Я нашел следующее полезным, когда у меня есть контроль над основным циклом приложения, запускаемого из sbt.
Я говорю sbt разветвляться при запуске приложения (в build.sbt):
fork in run := true
Я также говорю sbt перенаправить stdin из оболочки sbt в приложение (в build.sbt):
connectInput in run := true
Наконец, в основном потоке приложения я жду окончания файла на стандартном вводе и затем выключаю JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Конечно, вы можете использовать любой поток для чтения stdin и завершения работы, а не только основной поток.
Наконец, запустите sbt, при необходимости переключитесь на подпроект, который вы хотите запустить, запустите.
Теперь, когда вы хотите остановить процесс, закройте его стандартный ввод, набрав CTRL-D в оболочке sbt.
Подумайте об использовании SBT-Revolver . Мы используем его в нашей компании, и это действительно удобно. То, что вы просите, можно сделать с помощью:
reStart
reStop
Без необходимости настраивать файл build.sbt.
Вы можете использовать этот плагин, добавив:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
К вашему проекту / plugins.sbt
Ctrl+D
не работает.