Jak zakończyć bieg w SBT bez wychodzenia?
Próbuję CTRL + C, ale wychodzi z SBT. Czy istnieje sposób, aby zamknąć uruchomioną aplikację tylko przy otwartym SBT?
Ctrl + D
działa tylko dla frameworka Play.
Jak zakończyć bieg w SBT bez wychodzenia?
Próbuję CTRL + C, ale wychodzi z SBT. Czy istnieje sposób, aby zamknąć uruchomioną aplikację tylko przy otwartym SBT?
Ctrl + D
działa tylko dla frameworka Play.
Odpowiedzi:
W konfiguracji domyślnej Twoje uruchomienia odbywają się w tej samej JVM, na której działa sbt, więc nie możesz ich łatwo zabić osobno.
Jeśli wykonujesz swój bieg w oddzielnym, rozwidlonym JVM, jak opisano w Forking , możesz zabić tę JVM (w dowolny sposób oferowany przez system operacyjny) bez wpływu na JVM sbt:
fork in run := true
kill
wiersza poleceń lub w Menedżerze zadań (Windows) lub Force Quit lub Activity Monitor (Mac OS X) itp.
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
CTRL + D
Od wersji sbt 0.13.5 możesz dodać do swojego build.sbt
cancelable in Global := true
Jest zdefiniowane jako „Włącza (prawda) lub wyłącza (fałsz) możliwość przerwania wykonywania zadania za pomocą CTRL + C”. w definicji kluczy
Jeśli używasz Scala 2.12.7+, możesz również anulować kompilację za pomocą CTRL + C. Odniesienie https://github.com/scala/scala/pull/6479
Zgłoszono kilka błędów:
Znalazłem następujące przydatne, gdy mam kontrolę nad główną pętlą aplikacji uruchamianej z sbt.
Mówię sbt o rozwidlenie podczas uruchamiania aplikacji (w build.sbt):
fork in run := true
Mówię też sbt, aby przekazał stdin z powłoki sbt do aplikacji (w build.sbt):
connectInput in run := true
Na koniec w głównym wątku aplikacji czekam na koniec pliku na stdin, a następnie zamykam JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Oczywiście możesz użyć dowolnego wątku do odczytu wejścia standardowego i zamknięcia systemu, a nie tylko wątku głównego.
Na koniec uruchom sbt, opcjonalnie przełącz się na podprojekt, który chcesz uruchomić, uruchom.
Teraz, gdy chcesz zatrzymać proces, zamknij jego stdin, wpisując CTRL-D w powłoce sbt.
Rozważ użycie rewolweru SBT . Używamy go w naszej firmie i jest naprawdę przydatny. O to, o co prosisz, można zrobić:
reStart
reStop
Bez potrzeby konfigurowania pliku build.sbt.
Możesz użyć tej wtyczki, dodając:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Do twojego projektu / plugins.sbt
Ctrl+D
nie działa.