sbt run
Synopsis
sbt [query / ] run [args]
Description
The run task provides a means for running the user program.
In sbt 1.x and earlier, run task ran the user program in the same Java virtual machine (JVM) as the sbt server. sbt 2.x implements client-side run: the run task creates a sandbox environment that contains the program, sends the information back to sbtn, and sbtn launches the user program in a fresh JVM.
Motivations
There are several motivations for the client-side run.
- sys.exit support. User code can call
sys.exit, which normally shuts down the JVM. In sbt 1.x, we needed to trap thesesys.exitcalls to preventrunfrom shutting down the sbt session, using the JDK SecurityManager; however, TrapExit was dropped in sbt 1.6.0 (2021) since JDK 17 deprecated SecurityManager feature. Because client-side run runs the user program in its own JVM, it can callsys.exit. - Isolation. User code can also start threads, or otherwise allocate resources that can be left running after the main method returns. Running user code in a separate JVM gives isolation between the sbt server and the user code.
- sbt server availability. Since the program will run outside of the sbt server, it can become available to the more requests by other clients, for example test or IDE integration.