1. アップデートレポート

アップデートレポート 

update および関連タスクは、sbt.UpdateReport 型の値を生成します。このデータ構造は、解決された構成、モジュール、およびアーティファクトに関する情報を提供します。トップレベルでは、UpdateReport は、解決された各構成について ConfigurationReport 型のレポートを提供します。ConfigurationReport は、特定の構成に対して解決された各モジュールについて、レポート(ModuleReport 型)を提供します。最後に、ModuleReport は、正常に取得された各 Artifact と、それが取得された File、およびダウンロードできなかった Artifact をリストします。この欠落した Artifact リストは、update の場合は常に空であり、空でない場合は失敗します。ただし、updateClassifiers および updateSbtClassifers の場合は空でない可能性があります。

レポートのフィルタリングとアーティファクトの取得 

UpdateReport の一般的な使用法は、フィルターに一致するファイルのリストを取得することです。UpdateReport => RichUpdateReport 型の変換により、これらのメソッドが UpdateReport に暗黙的に提供されます。フィルターは、DependencyFilterConfigurationFilterModuleFilter、および ArtifactFilter 型によって定義されます。これらのフィルター型を使用すると、構成名、モジュール組織、名前、またはリビジョン、およびアーティファクト名、型、拡張子、または分類子でフィルター処理できます。

関連するメソッド(UpdateReport 上で暗黙的に)は次のとおりです。

def matching(f: DependencyFilter): Seq[File]

def select(configuration: ConfigurationFilter = ...,
  module: ModuleFilter = ...,
  artifact: ArtifactFilter = ...): Seq[File]

select への引数は省略できます。その場合、対応するコンポーネントに対してすべての値が許可されます。たとえば、ConfigurationFilter が指定されていない場合、すべての構成が受け入れられます。個々のフィルター型については、以下で説明します。

フィルターの基本 

構成、モジュール、およびアーティファクトフィルターは、通常、NameFilterConfigurationModuleID、または 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

ConfigurationFilter 

構成フィルターは、本質的に NameFilter をラップし、configurationFilter メソッドによって明示的に構築されます。

def configurationFilter(name: NameFilter = ...): ConfigurationFilter

引数が省略された場合、フィルターはすべての構成に一致します。String => Boolean 型の関数は、暗黙的に ConfigurationFilter に変換可能です。ModuleFilterArtifactFilter、および NameFilter と同様に、&|、および - メソッドを使用して ConfigurationFilter を組み合わせることができます。

import sbt._
val a: ConfigurationFilter = Set("compile", "test")
val b: ConfigurationFilter = (c: String) => c.startsWith("r")
val c: ConfigurationFilter = a | b

(明示的な型はここではオプションです。)

ModuleFilter 

モジュールフィルターは、3 つの NameFilter で定義されます。1 つは組織用、1 つはモジュール名用、1 つはリビジョン用です。モジュールフィルター全体が一致するためには、各コンポーネントフィルターが一致する必要があります。モジュールフィルターは、moduleFilter メソッドによって明示的に構築されます。

def moduleFilter(organization: NameFilter = ..., name: NameFilter = ..., revision: NameFilter = ...): ModuleFilter

省略された引数は、一致に寄与しません。すべての引数が省略された場合、フィルターはすべての ModuleID に一致します。ModuleID => Boolean 型の関数は、暗黙的に ModuleFilter に変換可能です。ConfigurationFilterArtifactFilter、および 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

(明示的な型はここではオプションです。)

ArtifactFilter 

アーティファクトフィルターは、4 つの NameFilter で定義されます。1 つは名前用、1 つは型用、1 つは拡張子用、1 つは分類子用です。アーティファクトフィルター全体が一致するためには、各コンポーネントフィルターが一致する必要があります。アーティファクトフィルターは、artifactFilter メソッドによって明示的に構築されます。

def artifactFilter(name: NameFilter = ..., `type`: NameFilter = ...,
  extension: NameFilter = ..., classifier: NameFilter = ...): ArtifactFilter

Artifact => Boolean 型の関数は、暗黙的に ArtifactFilter に変換可能です。ConfigurationFilterModuleFilter、および 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 を構築することもできます。DependencyFilter 結合メソッドの記号は、構成、モジュール、およびアーティファクトのより具体的なフィルターの結合子と区別するために、2 倍にされていることに注意してください。これらの二重文字メソッドは常に DependencyFilter を返しますが、単一文字メソッドはより具体的なフィルター型を保持します。たとえば

import sbt._

val df: DependencyFilter =
  configurationFilter(name = "compile" | "test") &&
  artifactFilter(`type` = "jar") ||
  moduleFilter(name = "dispatch-*")

ここでは、&&|| を使用して、個々のコンポーネントフィルターを依存関係フィルターに結合しました。その後、これを UpdateReport.matches メソッドに提供できます。または、UpdateReport.select メソッドを使用することもできます。これは、引数を && で結合して matches を呼び出すのと同等です。