sbt run
概要
sbt [query / ] run [args]
描述
run 任务提供运行用户程序的方式。
在 sbt 1.x 及更早版本中,run 任务在与 sbt server 相同的 Java 虚拟机(JVM)中运行用户程序。sbt 2.x 实现了 客户端 run:run 任务创建包含程序的沙箱环境,将信息发回 sbtn,由 sbtn 在新的 JVM 中启动用户程序。
动机
客户端 run 有若干动机。
- 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。 - 隔离。用户代码也可启动线程或分配其他资源,这些可能在 main 方法返回后继续运行。在独立 JVM 中运行用户代码可在 sbt server 与用户代码之间提供隔离。
- sbt server 可用性。由于程序在 sbt server 外运行,sbt server 可更及时响应其他客户端的请求,例如测试或 IDE 集成。