run
和 console
動作提供了一種在與 sbt 相同的虛擬機器中執行使用者程式碼的方法。
run
也存在一個稱為 runMain
的變體,它接受一個額外的初始引數,讓您可以指定要執行的 main 類別的完整名稱。run
和 runMain
共享相同的組態,並且無法單獨設定。
此頁面描述了在與 sbt 相同的虛擬機器中執行使用者程式碼的問題、sbt 如何處理這些問題、哪些類型的程式碼可以使用此功能,以及哪些類型的程式碼必須使用 forked jvm。如果您只想了解何時應該使用 forked jvm,請跳到使用者程式碼。
使用者程式碼可以呼叫 System.exit
,這通常會關閉 JVM。由於 run
和 console
動作在與 sbt 相同的 JVM 中執行,這也會結束建置並需要重新啟動 sbt。
使用者程式碼也可以啟動其他執行緒。執行緒可能會在主方法返回後繼續執行。特別是,建立 GUI 會建立多個執行緒,其中一些執行緒可能要到 JVM 終止才會終止。程式要到呼叫 System.exit
或所有非守護執行緒終止後才會完成。
在反序列化期間,可能會因為各種複雜的原因而使用錯誤的類別載入器。這可能會在許多情況下發生,在 SBT 下執行只是其中一種。例如,在問題 #163 和 #136 中討論了這一點。原因在這裡解釋 這裡。