Wie kann man einen Lauf in SBT beenden, ohne ihn zu beenden?
Ich versuche STRG + C, aber es beendet SBT. Gibt es eine Möglichkeit, die laufende Anwendung nur zu beenden, während SBT geöffnet bleibt?
Ctrl + D
funktioniert nur für Play Framework.
Wie kann man einen Lauf in SBT beenden, ohne ihn zu beenden?
Ich versuche STRG + C, aber es beendet SBT. Gibt es eine Möglichkeit, die laufende Anwendung nur zu beenden, während SBT geöffnet bleibt?
Ctrl + D
funktioniert nur für Play Framework.
Antworten:
In der Standardkonfiguration werden Ihre Läufe in derselben JVM ausgeführt, in der sbt ausgeführt wird, sodass Sie sie nicht einfach separat beenden können.
Wenn Sie Ihren Lauf in einer separaten, gegabelten JVM ausführen, wie unter Forking beschrieben , können Sie diese JVM (auf jede von Ihrem Betriebssystem angebotene Weise) beenden, ohne die JVM von sbt zu beeinträchtigen:
fork in run := true
kill
über die Befehlszeile oder im Task-Manager (Windows) oder Force Quit oder Activity Monitor (Mac OS X) usw.
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
mit STRG + D
Ab sbt Version 0.13.5 können Sie Ihre build.sbt hinzufügen
cancelable in Global := true
Es ist definiert als "Aktiviert (true) oder deaktiviert (false) die Fähigkeit, die Taskausführung mit STRG + C zu unterbrechen." in der Schlüsseldefinition
Wenn Sie Scala 2.12.7+ verwenden, können Sie die Kompilierung auch mit STRG + C abbrechen. Referenz https://github.com/scala/scala/pull/6479
Es wurden einige Fehler gemeldet:
Ich habe Folgendes nützlich gefunden, wenn ich die Kontrolle über die Hauptschleife der Anwendung habe, die von sbt ausgeführt wird.
Ich sage sbt, dass es beim Ausführen der Anwendung (in build.sbt) gegabelt werden soll:
fork in run := true
Ich fordere sbt außerdem auf, stdin von der sbt-Shell an die Anwendung weiterzuleiten (in build.sbt):
connectInput in run := true
Schließlich warte ich im Hauptthread der Anwendung auf das Dateiende auf stdin und schalte dann die JVM aus:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Natürlich können Sie jeden Thread zum Lesen von stdin und shutdown verwenden, nicht nur den Haupt-Thread.
Starten Sie abschließend sbt und wechseln Sie optional zu dem Teilprojekt, das Sie ausführen möchten.
Wenn Sie den Prozess jetzt stoppen möchten, schließen Sie den Standard, indem Sie STRG-D in die sbt-Shell eingeben.
Erwägen Sie die Verwendung von sbt-revolver . Wir verwenden es in unserer Firma und es ist wirklich praktisch. Für was Sie fragen, können Sie tun mit:
reStart
reStop
Ohne die Datei build.sbt konfigurieren zu müssen.
Sie können dieses Plugin verwenden, indem Sie Folgendes hinzufügen:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Zu Ihrem Projekt / plugins.sbt
Ctrl+D
funktioniert nicht.