是否可以使用 sbt-assembly
和 sbt-native-packager
插件来创建 java 应用程序原型(prototype)安装,而不是在 <app>/lib
中拥有项目 jar 及其依赖项只包含组装 jar ?
我构建了一个 Spark 应用程序,我想将程序集添加到上下文中,而不是单独添加每个 jar。
编辑:我需要为部署构建 deb 包。我希望 deb 包包含程序集而不是项目和依赖的 jar。
文件系统布局应该是
<install_dir>
bin
appname
conf
application.conf
lib
appname-assembly.jar
sbt-native-packager 添加一个符号链接(symbolic link)到/usr/bin 这很方便但不是必需的。
最佳答案
这可以通过原生包实现。可以找到一个完整的例子 on github 您必须更改 mappings 和 scriptClasspath
你的build.sbt应该包含以下部分
// the assembly settings
assemblySettings
// we specify the name for our fat jar
jarName in assembly := "assembly-project.jar"
// using the java server for this application
packageArchetype.java_server
maintainer in Linux := "Nepomuk Seiler <nepomuk.seiler@mukis.de>"
packageSummary in Linux := "Custom application configuration"
packageDescription := "Custom application configuration"
// removes all jar mappings in universal and appends the fat jar
mappings in Universal := {
// universalMappings: Seq[(File,String)]
val universalMappings = (mappings in Universal).value
val fatJar = (assembly in Compile).value
// removing means filtering
val filtered = universalMappings filter {
case (file, name) => ! name.endsWith(".jar")
}
// add the fat jar
filtered :+ (fatJar -> ("lib/" + fatJar.getName))
关于sbt - 如何使用 sbt-assembly 和 sbt-native-packager 构建 deb 包以包含单个程序集 jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24278233/