SBT-Stopplauf ohne Beenden


120

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+Dfunktioniert nicht.
Botchniaque

Ich denke, Ctrl + Dfunktioniert nur für Play Framework.
EnverOsmanov

Antworten:


44

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

9
Ich versuche das zu tun. Insbesondere habe ich Folgendes implementiert: stackoverflow.com/questions/3868863/…, aber sbt wird immer noch beendet, wenn ich STRG + C mache. Wie töte ich nur die gegabelte JVM?
dsg

2
mit killüber die Befehlszeile oder im Task-Manager (Windows) oder Force Quit oder Activity Monitor (Mac OS X) usw.
Seth Tisue

Führen Sie nach dem Gabeln, um alles Java außer sbt zu töten, aus:kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
Ich liebe diese Idee, aber sie scheint nicht zu helfen. Ich führe sbt 0.13.1 aus und füge diese Zeile meiner build.sbt-Datei hinzu.
Doub1ejack

Sie müssen die runmit STRG + D
Timofey

82

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:


5

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.


1

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.