종료하지 않고 SBT 중지 실행


120

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

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


Ctrl+D작동하지 않습니다.
botchniaque

Ctrl + DPlay 프레임 워크에서만 작동 한다고 생각 합니다.
EnverOsmanov

답변:


44

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

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

fork in run := true

9
나는 이것을 시도하고있다. 구체적으로 구현했습니다 : stackoverflow.com/questions/3868863/… 하지만 CTRL + C를 수행하면 sbt가 여전히 종료됩니다. 분기 된 JVM을 어떻게 종료합니까?
dsg 2011 년

2
kill명령 줄에서 또는 작업 관리자 (윈도우) 또는 강제 종료 또는 등 활동 모니터 (맥 OS X)는,
세스 Tisue

분기 후 sbt를 제외한 모든 Java를 종료하려면 다음을 실행하십시오.kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
이 아이디어가 마음에 들지만 도움이되지 않는 것 같습니다. sbt 0.13.1을 실행하고 내 build.sbt 파일에이 줄을 추가합니다.
doub1ejack 2014

당신은 죽일 필요 runCTRL + D와
Timofey

82

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

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


5

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를 입력하여 표준 입력을 닫습니다.


1

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

reStart

reStop

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

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

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

프로젝트 /plugins.sbt로

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.