1. 运行项目代码

运行项目代码 

runconsole 操作提供了在与 sbt 相同的虚拟机中运行用户代码的方式。

run 还存在一个名为 runMain 的变体,它接受一个额外的初始参数,允许你指定要运行的主类的完全限定名称。runrunMain 共享相同的配置,不能单独配置。

此页面描述了在与 sbt 相同的虚拟机中运行用户代码的问题,sbt 如何解决这些问题,哪些类型的代码可以使用此功能,以及哪些类型的代码必须使用 分叉的 jvm。如果只想了解何时应该使用 分叉的 jvm,请跳到用户代码部分。

问题 

System.exit 

用户代码可以调用 System.exit,它通常会关闭 JVM。由于 runconsole 操作在与 sbt 相同的 JVM 中运行,这也会结束构建并需要重新启动 sbt。

线程 

用户代码也可以启动其他线程。主方法返回后,线程可能会继续运行。特别是,创建 GUI 会创建多个线程,其中一些线程可能不会在 JVM 终止之前终止。在调用 System.exit 或所有非守护线程终止之前,程序不会完成。

反序列化和类加载 

在反序列化期间,可能会由于各种复杂原因使用错误的类加载器。这可能发生在许多场景中,在 SBT 下运行只是其中之一。例如,在问题 #163 和 #136 中讨论了这个问题。原因解释 这里