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