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
...
}
默认情况下,fullClasspath 包含一个目录,其中包含项目的类文件和资源。这反过来意味着诸如 compile、test 和 run 之类的任务在其类路径上具有这些类目录。要使用打包的工件(例如 jar)代替,请配置 exportJars
exportJars := true
这将在类路径上使用 packageBin 的结果,而不是类目录。
注意:具体来说,fullClasspath 是 dependencyClasspath 和 exportedProducts 的串联。当 exportJars 为 true 时,exportedProducts 是 packageBin 的输出。当 exportJars 为 false 时,exportedProducts 只是 products,默认情况下是包含类文件和资源的目录。
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.key、moduleID.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。只有受管依赖项的条目具有 Artifact 和 ModuleID。