Come si interrompe una corsa in SBT senza uscire?
Sto provando CTRL + C ma esce da SBT. Esiste un modo per uscire solo dall'applicazione in esecuzione mantenendo aperto SBT?
Ctrl + D
funzioni solo per il framework Play.
Come si interrompe una corsa in SBT senza uscire?
Sto provando CTRL + C ma esce da SBT. Esiste un modo per uscire solo dall'applicazione in esecuzione mantenendo aperto SBT?
Ctrl + D
funzioni solo per il framework Play.
Risposte:
Nella configurazione predefinita, le tue corse avvengono nella stessa JVM in cui è in esecuzione sbt, quindi non puoi ucciderle facilmente separatamente.
Se esegui la tua corsa in una JVM separata e biforcuta, come descritto in Forking , puoi uccidere quella JVM (con qualsiasi mezzo offerto dal tuo sistema operativo) senza influire sulla JVM di sbt:
fork in run := true
kill
dalla riga di comando, o nel Task Manager (Windows), o Force Quit o Activity Monitor (Mac OS X), ecc.
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
con CTRL + D
Dalla versione sbt 0.13.5 puoi aggiungere al tuo build.sbt
cancelable in Global := true
È definito come "Abilita (true) o disabilita (false) la capacità di interrompere l'esecuzione dell'attività con CTRL + C." nella definizione delle chiavi
Se stai usando Scala 2.12.7+ puoi anche cancellare la compilazione con CTRL + C. Riferimento https://github.com/scala/scala/pull/6479
Sono stati segnalati alcuni bug:
Ho trovato utile quanto segue quando ho il controllo sul ciclo principale dell'applicazione in esecuzione da sbt.
Dico a sbt di eseguire il fork durante l'esecuzione dell'applicazione (in build.sbt):
fork in run := true
Dico anche a sbt di inoltrare stdin dalla shell sbt all'applicazione (in build.sbt):
connectInput in run := true
Infine, nel thread principale dell'applicazione, aspetto la fine del file su stdin e quindi chiudo la JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Naturalmente, puoi usare qualsiasi thread per leggere stdin e shutdown, non solo il thread principale.
Infine, avvia sbt, opzionalmente passa al sottoprogetto che vuoi eseguire, esegui.
Ora, quando vuoi fermare il processo, chiudi il suo stdin digitando CTRL-D nella shell sbt.
Considera l' idea di usare sbt-revolver . Lo usiamo nella nostra azienda ed è davvero utile. Per quello che stai chiedendo si può fare con:
reStart
reStop
Senza bisogno di configurare il file build.sbt.
Puoi usare questo plugin aggiungendo:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Al tuo progetto / plugins.sbt
Ctrl+D
non funziona.