web-dev-qa-db-fra.com

SBT arrêter la course sans sortir

Comment terminer une course dans SBT sans quitter?

J'essaie CTRL + C mais il quitte SBT. Existe-t-il un moyen de quitter uniquement l'application en cours d'exécution tout en gardant SBT ouvert?

116
dsg

Dans la configuration par défaut, vos exécutions se produisent dans la même machine virtuelle Java que sbt est en cours d'exécution, vous ne pouvez donc pas facilement les tuer séparément.

Si vous effectuez votre exécution dans une JVM séparée et fourchue, comme décrit à Forking , vous pouvez tuer cette JVM (par tous les moyens offerts par votre système d'exploitation) sans affecter la JVM de sbt:

fork in run := true
43
Seth Tisue

Depuis la version 0.13.5 de sbt, vous pouvez ajouter à votre build.sbt

cancelable in Global := true

Il est défini comme "Active (vrai) ou désactive (faux) la possibilité d'interrompre l'exécution des tâches avec CTRL + C." dans la définition des clés

Si vous utilisez Scala 2.12.7+, vous pouvez également annuler la compilation avec CTRL + C. Référence https://github.com/scala/scala/pull/6479

Il y a quelques bugs signalés:

80
Jonas Anso

J'ai trouvé ce qui suit utile lorsque je contrôle la boucle principale de l'application exécutée à partir de sbt.

Je dis à sbt de bifurquer lors de l'exécution de l'application (dans build.sbt):

fork in run := true

Je dis également à sbt de transmettre stdin du shell sbt à l'application (dans build.sbt):

connectInput in run := true

Enfin, dans le thread principal de l'application, j'attends la fin du fichier sur stdin puis arrête la JVM:

while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)

Bien sûr, vous pouvez utiliser n'importe quel thread pour lire stdin et arrêter, pas seulement le thread principal.

Enfin, lancez sbt, basculez éventuellement vers le sous-projet que vous souhaitez exécuter, exécutez.

Maintenant, lorsque vous souhaitez arrêter le processus, fermez son stdin en tapant CTRL-D dans le shell sbt.

5
kilo

Pensez à utiliser sbt-revolver . Nous l'utilisons dans notre entreprise et c'est vraiment pratique. Pour ce que vous demandez peut être fait avec:

reStart

reStop

Sans avoir besoin de configurer le fichier build.sbt.

Vous pouvez utiliser ce plugin en ajoutant:

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

Vers votre projet/plugins.sbt

1
mtsokol