1. 类路径

类路径 

在类路径上包含一种新的受管工件类型,例如 mar 

classpathTypes 设置控制默认情况下包含在类路径上的受管工件类型。要添加一种新类型,例如 mar

classpathTypes += "mar"

获取用于编译的类路径 

在 sbt 提示符下运行 show classpathTypes 以查看默认包含的类型。

作用域为 CompiledependencyClasspath 任务提供用于编译的类路径。它的类型是 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.keyanalysis。例如,

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