1. クラスパス

クラスパス 

marなどの新しいタイプの管理対象アーティファクトをクラスパスに含める 

classpathTypes設定は、デフォルトでクラスパスに含まれる管理対象アーティファクトのタイプを制御します。marなどの新しいタイプを追加するには、

classpathTypes += "mar"

コンパイルに使用されるクラスパスを取得する 

sbtプロンプトでshow classpathTypesを実行すると、含まれるデフォルトのタイプを確認できます。

CompileにスコープされたdependencyClasspathタスクは、コンパイルに使用されるクラスパスを提供します。そのタイプはSeq[Attributed[File]]であり、各エントリに追加のメタデータが添付されていることを意味します。filesメソッドは、クラスパスの生のSeq[File]のみを提供します。たとえば、別のタスクでコンパイルクラスパスのファイルを使用するには、

example := {
  val cp: Seq[File] = (Compile / dependencyClasspath).value.files
  ...
}

注記:このクラスパスには、状況によってはコンパイルに必要なクラスディレクトリが含まれていません。

プロジェクトのコンパイル済みクラスを含むランタイムクラスパスを取得する 

fullClasspathタスクは、依存関係とプロジェクトの成果物の両方を含むクラスパスを提供します。ランタイムクラスパスでは、プロジェクトのメインリソースとコンパイル済みクラス、およびすべてのランタイム依存関係が含まれます。

クラスパスのタイプはSeq[Attributed[File]]であり、各エントリに追加のメタデータが添付されていることを意味します。filesメソッドは、クラスパスの生のSeq[File]のみを提供します。たとえば、別のタスクでランタイムクラスパスのファイルを使用するには、

example := {
  val cp: Seq[File] = (fullClasspath in Runtime).value.files
  ...
}

プロジェクトのコンパイル済みテストクラスを含むテストクラスパスを取得する 

fullClasspathタスクは、依存関係とプロジェクトの成果物の両方を含むクラスパスを提供します。テストクラスパスには、プロジェクトのメインとテストのリソースとコンパイル済みクラス、およびテストのすべての依存関係が含まれます。

クラスパスのタイプはSeq[Attributed[File]]であり、各エントリに追加のメタデータが添付されていることを意味します。filesメソッドは、クラスパスの生のSeq[File]のみを提供します。たとえば、別のタスクでテストクラスパスのファイルを使用するには、

example := {
  val cp: Seq[File] = (Test / fullClasspath).value.files
  ...
}

クラスディレクトリの代わりにパッケージ化されたjarをクラスパスで使用する 

デフォルトでは、fullClasspathには、プロジェクトのクラスファイルとリソースを含むディレクトリが含まれています。これは、compiletestrunなどのタスクがクラスパスにこれらのクラスディレクトリを持つことを意味します。代わりにパッケージ化されたアーティファクト(jarなど)を使用するには、exportJarsを設定します。

exportJars := true

これにより、クラスディレクトリの代わりにpackageBinの結果がクラスパスで使用されます。

注記:具体的には、fullClasspathはdependencyClasspathとexportedProductsの連結です。exportJarsがtrueの場合、exportedProductsはpackageBinの出力です。exportJarsがfalseの場合、exportedProductsは単にproductsであり、デフォルトではクラスファイルとリソースを含むディレクトリです。

設定のすべての管理対象jarを取得する 

updateタスクの結果はUpdateReport型であり、依存関係解決の結果が含まれています。これは、特定の設定で特定のタイプのアーティファクトのファイルを取り出すために使用できます。たとえば、Compile設定の依存関係のjarとzipを取得するには、

example := {
   val artifactTypes = Set("jar", "zip")
   val files =
      Classpaths.managedJars(Compile, artifactTypes, update.value)
   ...
}

クラスパスに含まれるファイルを取得する 

クラスパスはSeq[Attributed[File]]型であり、各エントリに追加のメタデータが添付されていることを意味します。filesメソッドは、クラスパスの生のSeq[File]のみを提供します。たとえば、

val cp: Seq[Attributed[File]] = ...
val files: Seq[File] = cp.files

クラスパスエントリを作成したモジュールとアーティファクトを取得する 

クラスパスはSeq[Attributed[File]]型であり、各エントリに追加のメタデータが添付されていることを意味します。このメタデータはAttributeMapの形式です。マップのエントリの有用なキーは、artifact.keymoduleID.key、およびanalysisです。たとえば、

val classpath: Seq[Attributed[File]] = ???
for(entry <- classpath) yield {
   val art: Option[Artifact] = entry.get(artifact.key)
   val mod: Option[ModuleID] = entry.get(moduleID.key)
   val an: Option[inc.Analysis] = entry.get(analysis)
   ...
}

注記:エントリには、一部またはすべてのメタデータが含まれていない場合があります。内部プロジェクトなどのソース依存関係からのエントリのみが、インクリメンタルコンパイルAnalysisを持ちます。管理対象依存関係のエントリのみがArtifactModuleIDを持ちます。