Як ви припиняєте пробіг в SBT без виходу з нього?
Я пробую CTRL + C, але він закінчує SBT. Чи є спосіб вийти лише із запущеної програми, зберігаючи SBT відкритим?
Ctrl + D
працює лише для Play Framework.
Як ви припиняєте пробіг в SBT без виходу з нього?
Я пробую CTRL + C, але він закінчує SBT. Чи є спосіб вийти лише із запущеної програми, зберігаючи SBT відкритим?
Ctrl + D
працює лише для Play Framework.
Відповіді:
У конфігурації за замовчуванням ваші запуски відбуваються в тому ж JVM, що і sbt, і ви не можете їх легко вбити окремо.
Якщо ви виконуєте пробіг в окремому роздвоєному JVM, як описано в Forking , ви можете вбити цей JVM (будь-якими способами, які пропонує ваша операційна система), не впливаючи на JVM sbt:
fork in run := true
kill
командного рядка, або в диспетчері завдань (Windows), або примусовому виїзді або моніторі діяльності (Mac OS X) тощо.
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 tok 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 та вимкнення, а не лише основну нитку.
Нарешті, запустіть sbt, необов'язково перейдіть на підпроект, який потрібно запустити, запустіть.
Тепер, коли ви хочете зупинити процес, закрийте його stdin, ввівши CTRL-D в оболонці sbt.
Подумайте про використання sbt-revolver . Ми використовуємо його в нашій компанії, і це дуже зручно. Для того, що ви просите, можна зробити з:
reStart
reStop
Без потреби налаштовувати файл build.sbt.
Ви можете використовувати цей плагін, додавши:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
До вашого проекту / plugins.sbt
Ctrl+D
не працює.