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?
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
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:
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.
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