1. 執行

執行 

本頁說明在設定專案後如何使用 sbt。它假設您已安裝 sbt並已瀏覽過sbt 範例

sbt Shell 

在專案目錄中執行 sbt,不帶任何引數

$ sbt

執行不帶命令列引數的 sbt 會啟動 sbt shell。sbt shell 具有命令提示字元(具有 Tab 鍵完成和歷史記錄!)。

例如,您可以在 sbt shell 中輸入 compile

> compile

若要再次compile,請按下向上箭頭鍵,然後按下 Enter 鍵。

若要執行程式,請輸入 run

若要離開 sbt shell,請輸入 exit 或使用 Ctrl+D (Unix) 或 Ctrl+Z (Windows)。

批次模式 

您也可以在批次模式中執行 sbt,並將以空格分隔的 sbt 命令清單指定為引數。對於需要引數的 sbt 命令,請將命令和引數作為一個引數傳遞給 sbt,方法是將它們括在引號中。例如:

$ sbt clean compile "testOnly TestA TestB"

在此範例中,testOnly 具有引數 TestATestB。命令將依序執行 (cleancompile,然後是 testOnly)。

注意:在批次模式中執行每次都需要 JVM 啟動和 JIT,因此您的建置速度會慢很多。對於日常程式碼撰寫,我們建議使用 sbt shell 或以下說明的持續建置和測試功能。

從 sbt 0.13.16 開始,在 sbt 中使用批次模式將發出資訊性啟動訊息:

$ sbt clean compile
[info] Executing in batch mode. For better performance use sbt's shell
...

它只會在 sbt compile 時觸發,而且也可以使用 suppressSbtShellNotification := true 來抑制。

持續建置與測試 

若要加快您的編輯-編譯-測試週期,您可以要求 sbt 在您每次儲存來源檔案時自動重新編譯或執行測試。

當一或多個來源檔案變更時,透過在命令前加上 ~,讓命令執行。例如,在 sbt shell 中嘗試:

> ~testQuick

按下 Enter 鍵以停止監看變更。

您可以在 sbt shell 或批次模式中使用 ~ 前綴。

請參閱觸發執行以取得更多詳細資訊。

常用命令 

以下是一些最常用的 sbt 命令。若要取得更完整的清單,請參閱命令列參考

命令 描述
clean 刪除所有產生的檔案 (在target目錄中)。
compile 編譯主要來源 (在src/main/scalasrc/main/java目錄中)。
test 編譯並執行所有測試。
console 使用類別路徑 (包含編譯來源和所有相依性) 啟動 Scala 直譯器。若要返回 sbt,請輸入:quit、Ctrl+D (Unix) 或 Ctrl+Z (Windows)。
run <argument>* 在與 sbt 相同的虛擬機器中執行專案的主要類別。
package 建立一個 jar 檔案,其中包含src/main/resources中的檔案,以及從src/main/scalasrc/main/java.
help <command> 顯示指定命令的詳細說明。如果未提供命令,則會顯示所有命令的簡短描述。
reload 重新載入建置定義 (build.sbt, project/*.scala, project/*.sbt檔案)。如果變更建置定義,則需要此動作。

Tab 鍵完成 

sbt shell 具有 Tab 鍵完成功能,包括在空白提示字元時。sbt 的特殊慣例是按一下 Tab 鍵可能只會顯示最有可能的完成子集,而多次按下 Tab 鍵則會顯示更詳細的選項。

sbt Shell 歷史記錄 

sbt shell 會記住歷史記錄,即使您結束 sbt 並重新啟動它。存取歷史記錄最簡單的方式是按下向上箭頭鍵,以循環瀏覽先前輸入的命令。

注意Ctrl-R 會以遞增方式向後搜尋歷史記錄。

透過 JLine 與終端機環境的整合,您可以變更 $HOME/.inputrc 檔案來自訂 sbt shell。例如,$HOME/.inputrc 中的下列設定會允許向上和向下箭頭鍵執行基於字首的歷史記錄搜尋。

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

sbt shell 也支援下列命令

命令 描述
! 顯示歷史記錄命令說明。
!! 再次執行上一個命令。
!: 顯示所有先前的命令。
!:n 顯示最後n個命令。
!n 執行索引為n的命令,如!:命令所示。
!-n 執行此命令之前第 n 個命令。
!string 執行以 'string' 開頭的最新命令。
!?string 執行包含 'string' 的最新命令。