1. 配置打包

配置打包 

在类路径上使用打包的 jar 而不是类目录 

默认情况下,项目会导出一个包含其资源和已编译类文件的目录。将 exportJars 设置为 true 以导出打包的 jar 而不是目录。例如,

exportJars := true

该 jar 将被 runtestconsole 和使用完整类路径的其他任务使用。

添加清单属性 

默认情况下,sbt 会从 organizationmainClass 等设置中构建二进制包的清单。可以通过配置和包任务作用域的 packageOptions 设置添加其他属性。

可以使用 Package.ManifestAttributes 添加主属性。此方法有两个变体,一个接受重复参数,将类型为 java.util.jar.Attributes.Name 的属性映射到 String 值,另一个将属性名称(类型为 String)映射到 String 值。

例如,

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 )
}

或者,要从文件读取清单

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 任务定义。