update および関連タスクは、sbt.UpdateReport 型の値を生成します。このデータ構造は、解決された構成、モジュール、およびアーティファクトに関する情報を提供します。トップレベルでは、UpdateReport は、解決された各構成について ConfigurationReport 型のレポートを提供します。ConfigurationReport は、特定の構成に対して解決された各モジュールについて、レポート(ModuleReport 型)を提供します。最後に、ModuleReport は、正常に取得された各 Artifact と、それが取得された File、およびダウンロードできなかった Artifact をリストします。この欠落した Artifact リストは、update の場合は常に空であり、空でない場合は失敗します。ただし、updateClassifiers および updateSbtClassifers の場合は空でない可能性があります。
UpdateReport の一般的な使用法は、フィルターに一致するファイルのリストを取得することです。UpdateReport => RichUpdateReport 型の変換により、これらのメソッドが UpdateReport に暗黙的に提供されます。フィルターは、DependencyFilter、ConfigurationFilter、ModuleFilter、および ArtifactFilter 型によって定義されます。これらのフィルター型を使用すると、構成名、モジュール組織、名前、またはリビジョン、およびアーティファクト名、型、拡張子、または分類子でフィルター処理できます。
関連するメソッド(UpdateReport 上で暗黙的に)は次のとおりです。
def matching(f: DependencyFilter): Seq[File]
def select(configuration: ConfigurationFilter = ...,
module: ModuleFilter = ...,
artifact: ArtifactFilter = ...): Seq[File]
select への引数は省略できます。その場合、対応するコンポーネントに対してすべての値が許可されます。たとえば、ConfigurationFilter が指定されていない場合、すべての構成が受け入れられます。個々のフィルター型については、以下で説明します。
構成、モジュール、およびアーティファクトフィルターは、通常、NameFilter を Configuration、ModuleID、または Artifact の各コンポーネントに適用することによって構築されます。基本的な NameFilter は、String から暗黙的に構築され、* はワイルドカードとして解釈されます。
import sbt._
// each argument is of type NameFilter
val mf: ModuleFilter = moduleFilter(organization = "*sbt*",
name = "main" | "actions", revision = "1.*" - "1.0")
// unspecified arguments match everything by default
val mf: ModuleFilter = moduleFilter(organization = "net.databinder")
// specifying "*" is the same as omitting the argument
val af: ArtifactFilter = artifactFilter(name = "*", `type` = "source",
extension = "jar", classifier = "sources")
val cf: ConfigurationFilter = configurationFilter(name = "compile" | "test")
または、NameFilter を含むこれらのフィルターは、適切な述語(Boolean を返す単一引数関数)によって直接定義できます。
import sbt._
// here the function value of type String => Boolean is implicitly converted to a NameFilter
val nf: NameFilter = (s: String) => s.startsWith("dispatch-")
// a Set[String] is a function String => Boolean
val acceptConfigs: Set[String] = Set("compile", "test")
// implicitly converted to a ConfigurationFilter
val cf: ConfigurationFilter = acceptConfigs
val mf: ModuleFilter = (m: ModuleID) => m.organization contains "sbt"
val af: ArtifactFilter = (a: Artifact) => a.classifier.isEmpty
構成フィルターは、本質的に NameFilter をラップし、configurationFilter メソッドによって明示的に構築されます。
def configurationFilter(name: NameFilter = ...): ConfigurationFilter
引数が省略された場合、フィルターはすべての構成に一致します。String => Boolean 型の関数は、暗黙的に ConfigurationFilter に変換可能です。ModuleFilter、ArtifactFilter、および NameFilter と同様に、&、|、および - メソッドを使用して ConfigurationFilter を組み合わせることができます。
import sbt._
val a: ConfigurationFilter = Set("compile", "test")
val b: ConfigurationFilter = (c: String) => c.startsWith("r")
val c: ConfigurationFilter = a | b
(明示的な型はここではオプションです。)
モジュールフィルターは、3 つの NameFilter で定義されます。1 つは組織用、1 つはモジュール名用、1 つはリビジョン用です。モジュールフィルター全体が一致するためには、各コンポーネントフィルターが一致する必要があります。モジュールフィルターは、moduleFilter メソッドによって明示的に構築されます。
def moduleFilter(organization: NameFilter = ..., name: NameFilter = ..., revision: NameFilter = ...): ModuleFilter
省略された引数は、一致に寄与しません。すべての引数が省略された場合、フィルターはすべての ModuleID に一致します。ModuleID => Boolean 型の関数は、暗黙的に ModuleFilter に変換可能です。ConfigurationFilter、ArtifactFilter、および NameFilter と同様に、&、|、および - メソッドを使用して ModuleFilter を組み合わせることができます。
import sbt._
val a: ModuleFilter = moduleFilter(name = "dispatch-twitter", revision = "0.7.8")
val b: ModuleFilter = moduleFilter(name = "dispatch-*")
val c: ModuleFilter = b - a
(明示的な型はここではオプションです。)
アーティファクトフィルターは、4 つの NameFilter で定義されます。1 つは名前用、1 つは型用、1 つは拡張子用、1 つは分類子用です。アーティファクトフィルター全体が一致するためには、各コンポーネントフィルターが一致する必要があります。アーティファクトフィルターは、artifactFilter メソッドによって明示的に構築されます。
def artifactFilter(name: NameFilter = ..., `type`: NameFilter = ...,
extension: NameFilter = ..., classifier: NameFilter = ...): ArtifactFilter
Artifact => Boolean 型の関数は、暗黙的に ArtifactFilter に変換可能です。ConfigurationFilter、ModuleFilter、および NameFilter と同様に、&、|、および - メソッドを使用して ArtifactFilter を組み合わせることができます。
import sbt._
val a: ArtifactFilter = artifactFilter(classifier = "javadoc")
val b: ArtifactFilter = artifactFilter(`type` = "jar")
val c: ArtifactFilter = b - a
(明示的な型はここではオプションです。)
DependencyFilter は、通常、&&、||、および -- を使用して他の DependencyFilter を組み合わせて構築されます。構成、モジュール、およびアーティファクトフィルターは、それ自体が DependencyFilter であり、DependencyFilter として直接使用することも、DependencyFilter を構築することもできます。DependencyFilter 結合メソッドの記号は、構成、モジュール、およびアーティファクトのより具体的なフィルターの結合子と区別するために、2 倍にされていることに注意してください。これらの二重文字メソッドは常に DependencyFilter を返しますが、単一文字メソッドはより具体的なフィルター型を保持します。たとえば
import sbt._
val df: DependencyFilter =
configurationFilter(name = "compile" | "test") &&
artifactFilter(`type` = "jar") ||
moduleFilter(name = "dispatch-*")
ここでは、&& と || を使用して、個々のコンポーネントフィルターを依存関係フィルターに結合しました。その後、これを UpdateReport.matches メソッドに提供できます。または、UpdateReport.select メソッドを使用することもできます。これは、引数を && で結合して matches を呼び出すのと同等です。