如何使用sbt-assembly和sbt-native-packager构建deb包以包含单个程序集jar?

时间:2014-06-18 06:12:42

标签: sbt apache-spark sbt-native-packager sbt-assembly

是否可以使用sbt-assemblysbt-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添加了一个符号链接,方便但不是必需的。

2 个答案:

答案 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文件。