1. 附加值

附加值 

附加到先前的值:+=++= 

使用 := 進行賦值是最簡單的轉換,但鍵也有其他方法。如果 SettingKey[T] 中的 T 是一個序列,也就是鍵的值類型是序列,您可以附加到序列,而不是取代它。

  • += 會將單一元素附加到序列。
  • ++= 會串聯另一個序列。

例如,鍵 Compile / sourceDirectories 的值為 Seq[File]。預設情況下,此鍵的值會包含 src/main/scala。如果您也想編譯名為 source 的目錄中的原始碼 (因為您只需要不使用標準),您可以新增該目錄

Compile / sourceDirectories += new File("source")

或者,為了方便起見,可以使用 sbt 套件中的 file() 函式

Compile / sourceDirectories += file("source")

(file() 只是建立一個新的 File。)

您可以使用 ++= 一次新增多個目錄

Compile / sourceDirectories ++= Seq(file("sources1"), file("sources2"))

其中 Seq(a, b, c, ...) 是標準 Scala 語法,用於建構序列。

若要完全取代預設來源目錄,當然可以使用 :=

Compile / sourceDirectories := Seq(file("sources1"), file("sources2"))

當設定未定義時 

每當設定使用 :=+=++= 來建立對其本身或其他鍵值的相依性時,它所相依的值必須存在。如果不存在,sbt 會抱怨。它可能會說「參考到未定義的設定」,例如。發生這種情況時,請確保您在定義它的作用域中使用鍵。

有可能建立循環,這是一個錯誤;如果您這樣做,sbt 會告訴您。

基於其他鍵值的任務 

您可以計算某些任務或設定的值,以定義或附加另一個任務的值。它是透過使用 Def.task 作為 :=+=++= 的引數來完成的。

作為第一個範例,請考慮使用專案基本目錄和編譯類別路徑附加來源產生器。

Compile / sourceGenerators += Def.task {
  myGenerator(baseDirectory.value, (Compile / managedClasspath).value)
}

使用相依性附加:+=++= 

在附加到現有設定或任務時,可以使用其他鍵,就像它們可以使用 := 進行賦值一樣。

例如,假設您有一個以專案命名的涵蓋範圍報告,並且您想將其新增至 clean 移除的檔案中

cleanFiles += file("coverage-report-" + name.value + ".txt")