1. 命令列參考

命令列參考 

本頁是您可以在 sbt 互動式提示或批次模式中使用的命令列選項、命令和任務的相對完整清單。請參閱「入門指南」中的 執行 以了解基本概念的簡介,而本頁則有更多詳細資訊。

關於命令列的注意事項 

  • 在 sbt 中,「任務」(task)是「在」建置定義內的,而「命令」(command)則會操作建置定義本身,這兩者之間有技術上的區別。如果您有興趣建立命令,請參閱 命令。這個 sbt 中「命令」的特定含義表示,對於「您可以在 sbt 提示符號輸入的內容」(可能是設定、任務或命令)沒有一個好的通用術語。
  • 某些任務會產生有用的值。這些值的 toString 表示可以使用 show <task> 來顯示,以執行任務,而不僅僅是 <task>
  • 在多專案建置中,執行相依性和 aggregate 設定控制要從哪些專案執行哪些任務。請參閱 多專案建置

專案層級任務 

  • clean 刪除所有產生的檔案(target 目錄)。
  • publishLocal 將成品(例如 jar)發佈到本機 Ivy 儲存庫,如「發佈」中所述。
  • publish 將成品(例如 jar)發佈到由 publishTo 設定定義的儲存庫,如「發佈」中所述。
  • update 解析並擷取外部相依性,如 程式庫相依性 中所述。

組態層級任務 

組態層級任務是與組態相關聯的任務。例如,compile(相當於 Compile/compile)會編譯主要原始碼(compile 組態)。Test/compile 會編譯測試原始碼(測試 test 組態)。compile 組態的大多數任務在 test 組態中都有對應的任務,可以使用 Test/ 前置詞來執行。

  • compile 編譯主要原始碼(在 src/main/scala 目錄中)。Test/compile 編譯測試原始碼(在 src/test/scala/ 目錄中)。
  • console 啟動 Scala 直譯器,其中類別路徑包含已編譯的原始碼、lib 目錄中的所有 jar 和受管理的程式庫。若要返回 sbt,請輸入 :quit、Ctrl+D (Unix) 或 Ctrl+Z (Windows)。同樣地,Test/console 會使用測試類別和類別路徑啟動直譯器。
  • consoleQuick 啟動 Scala 直譯器,其中類別路徑包含專案的編譯時相依性。Test/consoleQuick 使用測試相依性。此任務與 console 的不同之處在於,它不會強制編譯目前專案的原始碼。
  • consoleProject 使用類別路徑上的 sbt 和建置定義進入互動式工作階段。建置定義和相關值會繫結至變數,並匯入通用套件和值。如需更多資訊,請參閱 consoleProject 文件
  • doc 使用 scaladoc 為 src/main/scala 中的 Scala 原始碼檔案產生 API 文件。Test/docsrc/test/scala 中的原始碼檔案產生 API 文件。
  • package 建立包含 src/main/resources 中的檔案和從 src/main/scala 編譯的類別的 jar 檔案。Test/package 建立包含 src/test/resources 中的檔案和從 src/test/scala 編譯的類別的 jar 檔案。
  • packageDoc 建立包含從 src/main/scala 中的 Scala 原始碼檔案產生的 API 文件的 jar 檔案。Test/packageDoc 建立包含 src/test/scala 中測試原始碼檔案的 API 文件的 jar 檔案。
  • packageSrc:建立包含所有主要原始碼檔案和資源的 jar 檔案。封裝路徑相對於 src/main/scala 和 src/main/resources。同樣地,Test/packageSrc 會對測試原始碼檔案和資源執行操作。
  • run <argument>* 在與 sbt 相同的虛擬機器中執行專案的主要類別。主要類別會傳遞提供的引數。請參閱 執行專案程式碼,以了解在此動作執行的程式碼中使用 System.exit 和多執行緒(包括 GUI)的詳細資訊。Test/run 會在測試程式碼中執行主要類別。
  • runMain <main-class> <argument>* 在與 sbt 相同的虛擬機器中執行專案的指定主要類別。主要類別會傳遞提供的引數。請參閱 執行專案程式碼,以了解在此動作執行的程式碼中使用 System.exit 和多執行緒(包括 GUI)的詳細資訊。Test/runMain 會在測試程式碼中執行指定的 主要類別。
  • test 執行在測試編譯期間偵測到的所有測試。請參閱 測試,以了解詳細資訊。
  • testOnly <test>* 執行以引數形式提供的測試。*(將會)解譯為測試名稱中的萬用字元。請參閱 測試,以了解詳細資訊。
  • testQuick <test>* 執行以引數形式指定的測試(如果未提供引數,則執行所有測試),這些測試

    1. 尚未執行,或
    2. 上次執行時失敗,或
    3. 自上次成功執行以來,任何傳遞相依性已重新編譯 *(將會)解譯為測試名稱中的萬用字元。如需詳細資訊,請參閱 [Testing][Testing]。

一般命令 

  • exitquit 結束目前的互動式工作階段或建置。此外,Ctrl+D (Unix) 或 Ctrl+Z (Windows) 將會結束互動式提示符號。
  • help <command> 顯示指定命令的詳細說明。如果命令不存在,help 會列出名稱或描述與引數相符的命令的詳細說明,並將其解譯為正規表示式。如果未提供任何命令,則會顯示主要命令的簡短說明。相關命令是任務和設定。
  • projects [add|remove <URI>] 如果未提供任何引數,則列出所有可用的專案,或在提供的 URI 中新增/移除建置。(請參閱 多專案建置,以了解多專案建置的詳細資訊。)
  • project <project-id> 將目前的專案變更為具有 ID <project-id> 的專案。後續操作將在指定專案的內容中完成。(請參閱 多專案建置,以了解多專案建置的詳細資訊。)
  • ~ <command> 每當原始碼檔案變更時,執行專案指定的動作或方法。請參閱 觸發執行,以了解詳細資訊。
  • < filename 執行給定檔案中的命令。每個命令都應該在其自己的行上。會忽略空行和以「#」開頭的行
  • + <command> 針對 crossScalaVersions 設定中定義的所有 Scala 版本,執行專案指定的動作或方法。
  • ++ <version|home-directory> <command> 暫時變更建置專案的 Scala 版本,並執行提供的命令。<command> 是可選的。指定的 Scala 版本將會一直使用到重新載入專案、修改設定(例如透過 set 或 session 命令)或再次執行 ++ 為止。<version> 不需要列在建置定義中,但它必須在儲存庫中可用。或者,指定 Scala 安裝的路徑。
  • ; A ; B 執行 A,如果成功,則執行 B。請注意,需要開頭的分號。
  • eval <Scala-expression> 評估給定的 Scala 運算式,並傳回結果和推斷類型。這可用於設定系統屬性、作為計算機、分支處理等等。例如

    > eval System.setProperty("demo", "true")
    > eval 1+1
    > eval "ls -l" !
    

用於管理建置定義的命令 

  • reload [plugins|return] 若未指定任何參數,則重新載入建置,並在必要時重新編譯任何建置或外掛程式定義。reload plugins 會將目前專案變更為建置定義專案(位於 project/ 中)。這對於直接操作建置定義很有用。例如,在建置定義專案上執行 clean 會強制更新快照並重新編譯建置定義。reload return 則會變更回主專案。
  • set <設定表達式> 評估並套用指定的設定定義。該設定會一直生效,直到 sbt 重新啟動、重新載入建置,或該設定被另一個 set 指令覆寫,或被 session 指令移除為止。詳情請參閱.sbt 建置定義檢視設定
  • session <指令> 管理由 set 指令定義的工作階段設定。它可以持久化在提示字元中設定的設定。詳情請參閱檢視設定
  • inspect <設定鍵> 顯示有關設定的資訊,例如值、描述、定義範圍、依賴關係、委派鏈和相關設定。詳情請參閱檢視設定

Sbt 執行器引數 

從作業系統 Shell 啟動 sbt 執行器時,可以指定各種系統屬性或 JVM 額外選項來影響其行為。

sbt JVM 選項和系統屬性 

如果在 sbt 啟動時定義了 JAVA_OPTS 和/或 SBT_OPTS 環境變數,則它們的內容會作為命令列引數傳遞給執行 sbt 的 JVM。

如果目前目錄中存在名為 .jvmopts 的檔案,則其內容會在 sbt 啟動時附加到 JAVA_OPTS。同樣地,如果存在 .sbtopts 和/或 /etc/sbt/sbtopts,則它們的內容會附加到 SBT_OPTSJAVA_OPTS 的預設值為 -Dfile.encoding=UTF8

您也可以直接將 JVM 系統屬性和命令列選項指定為 sbt 引數:任何 -Dkey=val 引數都將原封不動地傳遞給 JVM,而任何 -J-Xfoo 都將作為 -Xfoo 傳遞。

有關更多詳細資訊,請參閱 sbt --help

sbt JVM 堆積、永久代和堆疊大小 

如果您發現自己用完了永久代空間,或者您的工作站記憶體不足,請像調整任何 Java 應用程式一樣調整 JVM 設定。

例如,一組常見的記憶體相關選項為

export SBT_OPTS="-Xmx2048M -Xss2M"
sbt

或者,如果您只想為此工作階段指定它們

sbt -J-Xmx2048M -J-Xss2M

啟動目錄 

sbt 只是一個引導程式,sbt 的實際核心、Scala 編譯器和標準函式庫預設會下載到共享目錄 $HOME/.sbt/boot/

若要變更此目錄的位置,請設定 sbt.boot.directory 系統屬性。相對路徑會針對目前的工作目錄解析,如果您想避免在專案之間共享啟動目錄,這會很有用。例如,以下範例使用 0.11 之前的樣式,將啟動目錄放在 project/boot/

sbt -Dsbt.boot.directory=project/boot/

終端機編碼 

您的終端機使用的字元編碼可能與 Java 平台預設編碼不同。在這種情況下,您需要指定 file.encoding=<編碼> 系統屬性,它可能看起來像這樣

export JAVA_OPTS="-Dfile.encoding=Cp1252"
sbt

HTTP/HTTPS/FTP 代理 

在 Unix 上,sbt 將從標準的 http_proxyhttps_proxyftp_proxy 環境變數中取得任何 HTTP、HTTPS 或 FTP 代理設定。如果您位於需要驗證的代理伺服器後方,則需要在 sbt 啟動時傳遞一些補充旗標。有關更多詳細資訊,請參閱JVM 網路系統屬性

例如

sbt -Dhttp.proxyUser=username -Dhttp.proxyPassword=mypassword

在 Windows 上,您的指令碼應設定代理主機、連接埠,以及如果適用的話,使用者名稱和密碼的屬性。例如,對於 HTTP

sbt -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=mypassword

在上述命令列中將 http 替換為 httpsftp,以設定 HTTPS 或 FTP。

其他系統屬性 

以下系統屬性也可以傳遞給 sbt

屬性 預設值 含義
sbt.banner 布林值 true(在 1.3+ 中) 顯示歡迎橫幅,宣傳新功能。
sbt.boot.directory 目錄 ~/.sbt/boot 共享啟動目錄的路徑。如果您在 CI 環境中使用 sbt,並且想要在執行之間快取 sbt 啟動類別,則應明確定義sbt.boot.directory
sbt.boot.properties 檔案 大致上sbt.boot.properties是 sbt 啟動器的內部,並且特定於 sbt 版本。 尋找 sbt 啟動屬性檔案的路徑。這可以是相對路徑(相對於 sbt 基本目錄、使用者主目錄或 sbt jar 檔案的位置),也可以是絕對路徑或絕對檔案 URI。
sbt.ci 布林值 false(除非 env 變數BUILD_NUMBER已設定) 適用於持續整合環境。抑制超殼和色彩。
sbt.client 布林值 false
sbt.color 字串 auto 取代sbt.log.format。若要開啟色彩,請使用alwaystrue。若要關閉色彩,請使用neverfalse>。如果輸出是支援色彩的終端機(而不是管道),則使用色彩,請使用auto.
sbt.coursier 布林值 true(在 1.3+ 中) 使用 coursier 擷取套件。(另請參閱sbt.ivy.)
sbt.coursier.home 目錄 CoursierDependencyResolution.defaultCacheLocation(在 1.3+ 中) coursier 成品快取的位置,預設值由Coursier 快取解析邏輯定義。您可以使用命令 `csrCacheDirectory` 驗證該值。如果您在 CI 環境中使用 coursier,並且想要在執行之間快取成品,則應明確定義sbt.coursier.home
sbt.extraClasspath 類別路徑項目 (加入到 sbt 類別路徑的 jar 檔案或目錄)。請注意,項目以逗號分隔,例如entry1, entry2,..。另請參閱sbt 啟動器文件中的resource
sbt.genbuildprops 布林值 true 如果遺失,則產生build.properties。如果未設定,則會延遲至sbt.skip.version.write.
sbt.global.base 目錄 $HOME/.sbt/1.0 包含全域設定和外掛程式的目錄。
xsbt.inc.debug 布林值 false 增量偵錯器的額外偵錯。
sbt.ivy 布林值 true(在 <1.3 中) 使用 ivy 擷取套件。
sbt.ivy.home 目錄 ~/.ivy2 包含本機 Ivy 儲存庫和成品快取的目錄。如果您在 CI 環境中使用 sbt,並且想要在執行之間快取 ivy 成品,則應明確定義sbt.ivy.home
sbt.log.noformat 布林值 false 如果為 true,則停用 ANSI 色碼。在不支援色彩的建置伺服器或終端機上很有用。
sbt.main.class 字串 sbt.xMain 要使用的 sbt 類別(替代方案包括sbt.ConsoleMainsbt.ScriptMain).
sbt.offline 布林值 false 避免從儲存庫擷取類別。
sbt.override.build.repos 布林值 false 如果為 true,則會忽略在建置定義中設定的儲存庫,並改為使用為啟動器設定的儲存庫。請參閱sbt.repository.configsbt 啟動器文件。
sbt.progress 字串 ? 使用always來顯示進度(「超殼」)。
sbt.repository.config 檔案 ~/.sbt/repositories 包含用於啟動器的儲存庫的檔案。格式與 sbt 啟動器設定檔案的[repositories]區段相同。此設定通常與設定sbt.override.build.repos一起使用true(請參閱sbt.override.build.repossbt 啟動器文件)。
sbt.resident.limit 數字 0 要保留的 Scala 編譯器數量。此實驗性功能旨在縮短編譯時間。它似乎沒有成功,並且可能會移除此旗標。
sbt.skip.version.write 布林值 false 如果遺失,則產生build.properties如果遺失。請參閱sbt.genbuildprops.
sbt.supershell 布林值 true如果啟用色彩 使用超殼(在 Shell 底部顯示進度)。
sbt.supershell.sleep 數字 100 更新超殼進度區域之間要等待的時間。
sbt.task.timings 布林值 false 測量執行工作所經過的時間。
sbt.task.timings.omit.paths 布林值 false 報告計時時省略路徑。
sbt.task.timings.on.shutdown 布林值 false 在 JVM 關閉時報告計時(而不是在工作完成時)。
sbt.task.timings.threshold 字串 0 如果計時報告中的項目低於此臨界值,則省略它們。
sbt.traces 布林值 false 為工作產生 Chrome Trace Event Format 記錄。
sbt.turbo 布林值 false 使用額外的分層類別載入器。
sbt.version 版本 1.9.8 要使用的 sbt 版本,通常取自project/build.properties.
sbt.watch.mode 字串 auto 如果polling,則定期檢查檔案系統是否有更新。