終了せずに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シェルからアプリケーション(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を入力してその標準入力を閉じます。
sbt-revolver の使用を検討してください。私たちは会社でそれを使用しており、本当に便利です。あなたが求めていることのために行うことができます:
reStart
reStop
Build.sbtファイルを構成する必要はありません。
以下を追加して、このプラグインを使用できます。
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
あなたのプロジェクト/plugins.sbtへ