1. 設定封裝

設定封裝 

在類別路徑上使用封裝的 jar,而不是類別目錄 

預設情況下,專案會匯出包含其資源和已編譯類別檔案的目錄。將 exportJars 設定為 true 以匯出封裝的 jar。例如,

exportJars := true

jar 將由 runtestconsole 和其他使用完整類別路徑的任務使用。

新增 manifest 屬性 

預設情況下,sbt 會從 organizationmainClass 等設定建構二進位封裝的 manifest。可以將其他屬性新增至由組態和封裝任務範圍設定的 packageOptions 設定中。

可以使用 Package.ManifestAttributes 新增主要屬性。此方法有兩種變體,一種接受重複的引數,將 java.util.jar.Attributes.Name 類型的屬性對應到字串值,另一種將屬性名稱 (字串類型) 對應到字串值。

例如,

Compile / packageBin / packageOptions +=
  Package.ManifestAttributes(java.util.jar.Attributes.Name.SEALED -> "true")

可以使用 Package.JarManifest 新增其他屬性。

Compile / packageBin / packageOptions +=  {
  import java.util.jar.{Attributes, Manifest}
  val manifest = new Manifest
  manifest.getAttributes("foo/bar/").put(Attributes.Name.SEALED, "false")
  Package.JarManifest( manifest )
}

或者,從檔案讀取 manifest

Compile / packageBin / packageOptions +=  {
  val file = new java.io.File("META-INF/MANIFEST.MF")
  val manifest = Using.fileInputStream(file)( in => new java.util.jar.Manifest(in) )
  Package.JarManifest( manifest )
}

變更封裝的檔案名稱 

artifactName 設定控制產生的封裝名稱。請參閱 構件 頁面以了解詳細資訊。

修改封裝的內容 

封裝的內容由 mappings 任務定義,類型為 Seq[(File,String)]mappings 任務是從要包含在封裝中的檔案到封裝中的路徑的對應序列。請參閱 對應檔案 以取得產生這些對應的便利函數。例如,若要將檔案 in/example.txt 新增至主要二進位 jar,路徑為「out/example.txt」,

Compile / packageBin / mappings += {
  (baseDirectory.value / "in" / "example.txt") -> "out/example.txt"
}

請注意,mappings 的範圍是由組態和特定的封裝任務所決定。例如,測試來源封裝的對應是由 Test / packageSrc / mappings 任務定義。