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

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

是否可以使用 sbt-assemblysbt-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 您必须更改 ma​​ppingsscriptClasspath

你的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/

相关文章:

google-api - 谷歌 API : object oauth2 is not a member of package com. google.api.services

scala - Spark中的groupByKey是否保留原始顺序?

apache-spark - 有没有办法访问构建在 databricks 集群之上的 RStudio Server 中的 dbutils?

apache-spark - 从列表的 RDD 创建 Spark DataFrame

playframework - 将 JVM Opts 从 build.sbt 传递到 Play Framework 2.2.x 中的启动脚本

scala - 使用 sass 和 compass 配置文件玩框架 2

scala - SBT 在任务 Hook 之前/之后

scala - SBT 原生打包器中的多个项目依赖项

java - 映射目录时 sbt-native-packager 失败并显示 "Too many open files in system"

scala - 为 Play 项目并行运行 Selenium 测试