默认情况下,项目会导出一个包含其资源和已编译类文件的目录。将 exportJars
设置为 true 以导出打包的 jar 而不是目录。例如,
exportJars := true
该 jar 将被 run
、test
、console
和使用完整类路径的其他任务使用。
默认情况下,sbt 会从 organization
和 mainClass
等设置中构建二进制包的清单。可以通过配置和包任务作用域的 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
任务定义。