3

是否可以使用sbt-assemblysbt-native-packager插件来创建一个 java 应用程序原型安装,而不是让项目 jar 及其依赖项<app>/lib只包含程序集 jar?

我已经构建了一个 Spark 应用程序,我想将程序集添加到上下文中,而不是单独添加每个 jar。

编辑:我需要为部署构建 deb 包。我希望 deb 包包含程序集而不是项目和依赖 jar。

文件系统布局应该是

<install_dir>
     bin
         appname
     conf
         application.conf
     lib
         appname-assembly.jar

sbt-native-packager 向 /usr/bin 添加了一个符号链接,这很方便但不是必需的。

4

2 回答 2

1

使用本机包可以做到这一点。可以在 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))
于 2014-09-26T07:08:38.650 回答
0

看来sbt-onejar插件可能会有所帮助(而不是依赖其他插件 - sbt-assembly 和 sbt-native-packager):

sbt-onejar 是一个简单的构建工具插件,用于构建单个可执行 JAR,其中包含所有代码和依赖项作为嵌套 JAR。

于 2014-06-18T11:04:02.177 回答