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 只是產品,預設情況下,該產品是包含類別檔案和資源的目錄。
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。