web-dev-qa-db-ja.com

SBTは終了せずに実行を停止します

終了せずにSBTで実行を終了するにはどうすればよいですか?

CTRL + Cを試していますが、SBTを終了します。 SBTを開いたまま、実行中のアプリケーションのみを終了する方法はありますか?

116
dsg

デフォルト設定では、実行はsbtが実行されているのと同じJVMで行われるため、それらを個別に簡単に強制終了することはできません。

Forking で説明されているように、別のフォークされたJVMで実行する場合、sbtのJVMに影響を与えることなく、そのオペレーティングシステムが提供するJVMを強制終了できます。

fork in run := true
43
Seth Tisue

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

いくつかのバグが報告されています。

80
Jonas Anso

Sbtから実行されるアプリケーションのメインループを制御できる場合、次のことが役立ちます。

(build.sbtで)アプリケーションを実行するときに、フォークするようにsbtに指示します。

fork in run := true

また、sbtシェルからアプリケーション(build.sbt)にstdinを転送するよう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を入力してその標準入力を閉じます。

5
kilo

sbt-revolver の使用を検討してください。私たちは会社でそれを使用しており、本当に便利です。あなたが求めていることのために行うことができます:

reStart

reStop

Build.sbtファイルを構成する必要はありません。

以下を追加して、このプラグインを使用できます。

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

あなたのプロジェクト/plugins.sbtへ

1
mtsokol