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