+=と++= :=による代入は最も単純な変換ですが、キーには他にもメソッドがあります。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")