+=
和 ++=
使用 :=
進行賦值是最簡單的轉換,但鍵也有其他方法。如果 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")