Как собрать пакет deb, содержащий одну сборку jar с sbt-assembly и sbt-native-packager?
Можно ли использовать sbt-assembly
а также sbt-native-packager
плагины для создания архетипа установки java-приложения, в котором вместо jar проекта и его зависимостей <app>/lib
содержит только сборку банку?
Я создал приложение Spark и хочу добавить сборку в контекст, а не добавлять каждый jar-файл отдельно.
Изменить: мне нужно собрать пакеты deb для развертывания. Я хочу, чтобы пакет deb содержал сборку, а не проект и зависимые фляги.
Структура файловой системы должна быть
<install_dir>
bin
appname
conf
application.conf
lib
appname-assembly.jar
sbt-native-packager добавляет символическую ссылку в / usr / bin, что удобно, но не обязательно.
2 ответа
Это возможно с родным пакетом. Полный пример можно найти на 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))
Похоже, что плагин sbt-onejar может помочь (вместо того, чтобы полагаться на другие плагины - sbt-assembly и sbt-native-packager):
sbt-onejar - это простой плагин для сборки инструментов для создания одного исполняемого JAR-файла, содержащего весь ваш код и зависимости в виде вложенных JAR-файлов.