1. 執行專案程式碼

執行專案程式碼 

runconsole 動作提供了一種在與 sbt 相同的虛擬機器中執行使用者程式碼的方法。

run 也存在一個稱為 runMain 的變體,它接受一個額外的初始引數,讓您可以指定要執行的 main 類別的完整名稱。runrunMain 共享相同的組態,並且無法單獨設定。

此頁面描述了在與 sbt 相同的虛擬機器中執行使用者程式碼的問題、sbt 如何處理這些問題、哪些類型的程式碼可以使用此功能,以及哪些類型的程式碼必須使用 forked jvm。如果您只想了解何時應該使用 forked jvm,請跳到使用者程式碼。

問題 

System.exit 

使用者程式碼可以呼叫 System.exit,這通常會關閉 JVM。由於 runconsole 動作在與 sbt 相同的 JVM 中執行,這也會結束建置並需要重新啟動 sbt。

執行緒 

使用者程式碼也可以啟動其他執行緒。執行緒可能會在主方法返回後繼續執行。特別是,建立 GUI 會建立多個執行緒,其中一些執行緒可能要到 JVM 終止才會終止。程式要到呼叫 System.exit 或所有非守護執行緒終止後才會完成。

反序列化和類別載入 

在反序列化期間,可能會因為各種複雜的原因而使用錯誤的類別載入器。這可能會在許多情況下發生,在 SBT 下執行只是其中一種。例如,在問題 #163 和 #136 中討論了這一點。原因在這裡解釋 這裡