是否可以使用sbt-assembly
和sbt-native-packager
插件创建一个java应用程序原型安装,而不是让<app>/lib
中的项目jar及其依赖项只包含程序集jar?
我已经构建了一个Spark应用程序,我想将程序集添加到上下文中,而不是单独添加每个jar。
编辑:我需要为部署构建deb软件包。我希望deb包包含程序集而不是项目&amp;依赖罐子。
文件系统布局应该是
<install_dir>
bin
appname
conf
application.conf
lib
appname-assembly.jar
sbt-native-packager为/ usr / bin添加了一个符号链接,方便但不是必需的。
答案 0 :(得分:1)
本机包可以实现这一点。可以找到完整的示例on github 您必须更改映射和 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))
答案 1 :(得分:0)
似乎sbt-onejar插件可能有所帮助(而不是依赖于其他插件 - sbt-assembly和sbt-native-packager):
sbt-onejar是一个用于构建单个的简单构建工具插件 可执行JAR,包含嵌套的所有代码和依赖项 JAR文件。