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")