[scala] 종료하지 않고 SBT 중지 실행

종료하지 않고 SBT에서 실행을 종료하는 방법은 무엇입니까?

CTRL + C를 시도하고 있지만 SBT를 종료합니다. SBT를 열린 상태로 유지하면서 실행중인 응용 프로그램 만 종료 할 수있는 방법이 있습니까?



답변

기본 구성에서 실행은 sbt가 실행중인 동일한 JVM에서 발생하므로 별도로 쉽게 종료 할 수 없습니다.

Forking에 설명 된대로 별도의 분기 된 JVM에서 실행을 수행하는 경우 sbt의 JVM에 영향을주지 않고 해당 JVM (운영 체제가 제공하는 방식에 관계없이)을 종료 할 수 있습니다.

fork in run := true


답변

sbt 버전 0.13.5부터 build.sbt에 추가 할 수 있습니다.

cancelable in Global := true

“CTRL + C를 사용하여 작업 실행을 중단하는 기능을 활성화 (true) 또는 비활성화 (false)”하는 것으로 정의됩니다. 의 키 정의

Scala 2.12.7 이상을 사용하는 경우 CTRL + C를 사용하여 컴파일을 취소 할 수도 있습니다. 참조 https://github.com/scala/scala/pull/6479

보고 된 몇 가지 버그가 있습니다.


답변

sbt에서 실행되는 응용 프로그램의 기본 루프를 제어 할 때 다음이 유용하다는 것을 알았습니다.

응용 프로그램을 실행할 때 (build.sbt에서) 포크하도록 sbt에 지시합니다.

fork in run := true

또한 sbt에게 stdin을 sbt 셸에서 응용 프로그램 (build.sbt)으로 전달하도록 지시합니다.

connectInput in run := true

마지막으로 애플리케이션의 메인 스레드에서 stdin의 파일 끝을 기다린 다음 JVM을 종료합니다.

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

물론 기본 스레드뿐만 아니라 모든 스레드를 사용하여 stdin 및 종료를 읽을 수 있습니다.

마지막으로 sbt를 시작하고 선택적으로 실행하려는 하위 프로젝트로 전환하고 실행합니다.

이제 프로세스를 중지하려면 sbt 셸에 CTRL-D를 입력하여 표준 입력을 닫습니다.


답변

sbt-revolver 사용을 고려하십시오 . 우리 회사에서 사용하고 정말 편리합니다. 당신이 요구하는 것은 다음과 같이 할 수 있습니다.

reStart

reStop

build.sbt 파일을 구성 할 필요가 없습니다.

다음을 추가하여이 플러그인을 사용할 수 있습니다.

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

프로젝트 /plugins.sbt로


답변