此頁概述 sbt 為特定建置載入設定的機制,包括使用者可以控制所有項目順序的掛鉤。
如其他地方所述,sbt 透過 Setting[_]
物件建構其初始化圖和任務圖。設定是可以取得儲存在建置狀態中其他 Keys
的值,並為特定建置鍵產生新值的東西。sbt 將所有已註冊的 Setting[_]
物件轉換為一個巨大的線性序列,並將它們編譯成任務圖。然後使用此任務圖來執行您的建置。
sbt 的所有載入語意都包含在 Load.scala 檔案中。它大致如下:
藍色圓圈代表 sbt 載入專案時發生的動作。我們可以看到 sbt 在載入時執行以下動作:
編譯使用者層級專案 (~/.sbt/<version>/
)
a. 載入此專案定義的任何外掛程式 (~/.sbt/<version>/plugins/*.sbt
和 ~/.sbt/<version>/plugins/project/*.scala
) b. 載入所有已定義的設定 (~/.sbt/<version>/*.sbt
和 ~/.sbt/<version>/plugins/*.scala
)
編譯目前的專案 (<working-directory/project
)
a. 載入所有已定義的外掛程式 (project/plugins.sbt
和 project/project/*.scala
) b. 載入/編譯專案 (project/*.scala
)
*.sbt
檔案 (build.sbt
和相關檔案)。每個載入都會定義幾個設定序列。該圖顯示了兩個最重要的:
buildSettings
- 這些設定定義為 in ThisBuild
或直接針對 Build
物件。它們會在建置時初始化一次。您可以在 build.sbt
檔案中新增這些設定,例如:
ThisBuild / foo := "hi"
projectSettings
- 這些是特定於專案的設定。它們是特定於建置中的特定子專案。外掛程式可能會將其設定貢獻給多個專案,在這種情況下,每個專案的值都會重複。您可以在 project/build.scala
中新增特定專案設定,例如:
lazy val root = (project in file(".")).settings(...)
在載入/編譯所有建置定義之後,sbt 有一系列必須排序的 Seq[Setting[_]]
。如圖所示,sbt 的預設包含順序為:
~/.sbt/<version>/*.sbt
)build.sbt
)