1. 設定初始化

設定初始化 

此頁概述 sbt 為特定建置載入設定的機制,包括使用者可以控制所有項目順序的掛鉤。

如其他地方所述,sbt 透過 Setting[_] 物件建構其初始化圖和任務圖。設定是可以取得儲存在建置狀態中其他 Keys 的值,並為特定建置鍵產生新值的東西。sbt 將所有已註冊的 Setting[_] 物件轉換為一個巨大的線性序列,並將它們編譯成任務圖。然後使用此任務圖來執行您的建置。

sbt 的所有載入語意都包含在 Load.scala 檔案中。它大致如下:

image

藍色圓圈代表 sbt 載入專案時發生的動作。我們可以看到 sbt 在載入時執行以下動作:

  1. 編譯使用者層級專案 (~/.sbt/<version>/)

    a. 載入此專案定義的任何外掛程式 (~/.sbt/<version>/plugins/*.sbt~/.sbt/<version>/plugins/project/*.scala) b. 載入所有已定義的設定 (~/.sbt/<version>/*.sbt~/.sbt/<version>/plugins/*.scala)

  2. 編譯目前的專案 (<working-directory/project)

    a. 載入所有已定義的外掛程式 (project/plugins.sbtproject/project/*.scala) b. 載入/編譯專案 (project/*.scala)

  3. 載入專案 *.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 的預設包含順序為:

  1. 所有 AutoPlugin 設定
  2. 使用者目錄中定義的所有設定 (~/.sbt/<version>/*.sbt)
  3. 所有本機設定 (build.sbt)