Как собрать пакет deb, содержащий одну сборку jar с помощью sbt-assembly и sbt-native-packager?

Можно ли использовать плагины sbt-assembly и sbt-native-packager для создания установки архетипа java-приложения, которая вместо jar-файла проекта и его зависимостей в <app>/lib содержит только jar-файл сборки?

Я создал приложение Spark и хочу добавить сборку в контекст, а не добавлять каждую банку по отдельности.

Изменить: мне нужно собрать пакеты deb для развертывания. Я хочу, чтобы пакет deb содержал сборку, а не проект и зависимые банки.

Структура файловой системы должна быть

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

sbt-native-packager добавляет символическую ссылку в /usr/bin, что удобно, но не обязательно.


person dkorz    schedule 18.06.2014    source источник
comment
Можете ли вы добавить ожидаемый макет пакета deb и как файлы связаны с проектом?   -  person Jacek Laskowski    schedule 19.06.2014
comment
отредактированный вопрос, чтобы добавить макет файла   -  person dkorz    schedule 20.06.2014


Ответы (2)


Это возможно с родным пакетом. Полный пример можно найти на github Вам необходимо изменить сопоставления и pathClasspath.

Ваш 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 <[email protected]>"

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))
person Muki    schedule 26.09.2014

Похоже, что плагин sbt-onejar может помочь (вместо того, чтобы полагаться на другие плагины - sbt-assembly и sbt-native-packager):

sbt-onejar — это плагин простого инструмента для сборки одного исполняемого JAR-файла, содержащего весь ваш код и зависимости в виде вложенных JAR-файлов.

person Jacek Laskowski    schedule 18.06.2014
comment
Я обновил вопрос, указав, что мне нужно создать пакет deb, как это делает sbt-native-packager. - person dkorz; 19.06.2014