sbt run

概要

sbt [query / ] run [args]

説明

run タスクはユーザープログラムを実行する手段を提供する。

sbt 1.x 以前では、run タスクはユーザープログラムを sbt server と同じ Java 仮想マシン (JVM) 上で実行していた。sbt 2.x ではクライアントサイド runを実装している。run タスクはプログラムを含むサンドボックス環境を作成し、情報を sbtn に送り返す。ユーザープログラムは、sbtn が起動する新しい JVM 内で実行されるという仕組みだ。

特長

クライアントサイド run にはいくつかの特長がある。

  1. sys.exit のサポート。ユーザーコードは sys.exit を呼び出せる。通常これは JVM をシャットダウンする。sbt 1.x では、JDK の SecurityManager を使ってこれらの sys.exit 呼び出しをトラップし、run が sbt セッションをシャットダウンするのを防ぐ必要があった。しかし JDK 17 で SecurityManager が非推奨になったため、TrapExit は sbt 1.6.0 (2021) で削除された。クライアントサイド run はユーザープログラムを専用の JVM で実行するため、sys.exit を呼び出せる。
  2. 分離。ユーザーコードはスレッドを開始したり、main メソッドが戻った後も動作し続けるリソースを割り当てたりできる。別の JVM でユーザーコードを実行することで、sbt server とユーザーコードの間の分離が得られる。
  3. sbt server の可用性。プログラムは sbt server の外で実行されるため、テストや IDE 連携など、他のクライアントからのより多くのリクエストに対応できる。