Como você encerra uma execução no SBT sem sair?
Estou tentando CTRL + C, mas ele sai do SBT. Existe uma maneira de sair apenas do aplicativo em execução enquanto mantém o SBT aberto?
Ctrl + D
funciona apenas para o framework Play.
Como você encerra uma execução no SBT sem sair?
Estou tentando CTRL + C, mas ele sai do SBT. Existe uma maneira de sair apenas do aplicativo em execução enquanto mantém o SBT aberto?
Ctrl + D
funciona apenas para o framework Play.
Respostas:
Na configuração padrão, suas execuções acontecem na mesma JVM que o sbt está executando, portanto, você não pode matá-las facilmente separadamente.
Se você executar sua execução em uma JVM bifurcada separada, conforme descrito em Forking , poderá matá-la (por qualquer meio que seu sistema operacional oferecer) sem afetar a JVM da sbt:
fork in run := true
kill
a partir da linha de comando, ou no Gerenciador de Tarefas (Windows), ou Forçar Encerrar ou Activity Monitor (Mac OS X), etc.
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
com CTRL + D
Na versão 0.13.5 do sbt, você pode adicionar ao seu build.sbt
cancelable in Global := true
É definido como "Habilita (verdadeiro) ou desabilita (falso) a capacidade de interromper a execução da tarefa com CTRL + C". no definição de chaves
Se você estiver usando o Scala 2.12.7+, também poderá cancelar a compilação com CTRL + C. Referência https://github.com/scala/scala/pull/6479
Existem alguns erros relatados:
Eu achei o seguinte útil quando tenho controle sobre o loop principal do aplicativo que está sendo executado a partir do sbt.
Eu digo ao sbt para bifurcar ao executar o aplicativo (no build.sbt):
fork in run := true
Eu também digo ao sbt para encaminhar o stdin do shell sbt para o aplicativo (no build.sbt):
connectInput in run := true
Finalmente, no encadeamento principal do aplicativo, espero o final do arquivo no stdin e, em seguida, encerro a JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Obviamente, você pode usar qualquer thread para ler stdin e shutdown, não apenas o thread principal.
Por fim, inicie o sbt, alternativamente, alterne para o subprojeto que deseja executar, execute.
Agora, quando você quiser interromper o processo, feche seu stdin digitando CTRL-D no shell sbt.
Considere usar o sbt-revolver . Nós o usamos em nossa empresa e é realmente útil. O que você está pedindo pode ser feito com:
reStart
reStop
Sem a necessidade de configurar o arquivo build.sbt.
Você pode usar este plugin adicionando:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Para o seu projeto / plugins.sbt
Ctrl+D
não funciona.