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
を呼び出すのと同等です。