SBT перестати працювати без виходу


120

Як ви припиняєте пробіг в SBT без виходу з нього?

Я пробую CTRL + C, але він закінчує SBT. Чи є спосіб вийти лише із запущеної програми, зберігаючи SBT відкритим?


Ctrl+Dне працює.
botchniaque

Я думаю, що Ctrl + Dпрацює лише для Play Framework.
EnverOsmanov

Відповіді:


44

У конфігурації за замовчуванням ваші запуски відбуваються в тому ж JVM, що і sbt, і ви не можете їх легко вбити окремо.

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

fork in run := true

9
Я намагаюся це зробити. В Зокрема, я реалізував: stackoverflow.com/questions/3868863 / ... але SBT ще виходить , коли я роблю CTRL + C. Як я вбиваю тільки роздвоєний СП?
dsg

2
з killкомандного рядка, або в диспетчері завдань (Windows), або примусовому виїзді або моніторі діяльності (Mac OS X) тощо.
Seth Tisue

Розігнувши, щоб убити все java, крім sbt, запустіть:kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
Мені подобається ця ідея, але вона, здається, не допомагає. Я запускаю sbt 0.13.1 і додаю цей рядок у свій файл build.sbt ..
сумневу1ejack

вам потрібно вбити runCTRL + D
Тимофей

82

З 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

Повідомляються про деякі помилки:


5

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


1

Подумайте про використання sbt-revolver . Ми використовуємо його в нашій компанії, і це дуже зручно. Для того, що ви просите, можна зробити з:

reStart

reStop

Без потреби налаштовувати файл build.sbt.

Ви можете використовувати цей плагін, додавши:

addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")

До вашого проекту / plugins.sbt

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.