使用sbt native packager简化仅deb构建的设置

时间:2013-12-20 15:37:31

标签: scala sbt dpkg sbt-native-packager

我正在尝试将我的scala主应用程序代码打包为.deb文件。该应用程序只能在ubuntu机器上运行,因此我并不关心Windows等。

目前,我正在努力寻找使用最简单设置编译.deb最简单的方法。假设我的object Kernel extends App文件夹中有一个简单的src scala文件,该文件应捆绑在jardependencies中。

我目前基于scala的项目debian设置是:

import com.typesafe.sbt.SbtNativePackager._
import NativePackagerKeys.


  val debSettings = mapGenericFilesToLinux ++ linuxSettings ++ debianSettings ++ Seq( 
    name in Debian := "my-app",
    version in Debian := "0.1-version",
    mainClass := Some("Kernel"),
    packageSummary := "",
    target := new java.io.File("target"),
    packageDescription := "my app",
    packageDescription := "my app desciption",
    NativePackagerKeys.normalizedName := "normalizedName",
    maintainer := "my name",
    sourceDirectory := new java.io.File("./src"),
    debianPackageDependencies in Debian ++= Seq("openjdk-7-jre"),
    debianPackageRecommends in Debian ++= Seq(),
    linuxPackageMappings in Debian ++= Seq() ,
    debianMaintainerScripts ++=Seq())

debian:package-bin调用工作并创建了deb但没有二进制文件/ jar被复制到deb中,所以我显然缺少一些配置。我知道仍然缺少linuxPackageMappings等,但我想知道是否有更简单的编译配置?使用packageArchetype.java_server迫使我为windows等包含许多未使用的变量。我想避免这种情况。

有关如何简化仅限deb构建的设置+映射的任何建议吗?

1 个答案:

答案 0 :(得分:3)

您可以从以下位置获取与您相关的设置:

https://github.com/sbt/sbt-native-packager/blob/master/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala#L24

所以,这应该是这样的:

import com.typesafe.sbt.packager.archetypes._

packagerSettings

mapGenericMappingsToLinux

JavaAppPackaging.settings

JavaServerAppPackaging.debianSettings

告诫正确的进口。让我们来介绍一下这些内容:

  1. packagerSettings添加了打包程序任务的基本“流程”,但未配置任何文件或设置
  2. mapGenericMappingsToLinux是一个钩子,它将把mappings in Universal中配置的所有东西都用到Linux软件包并尝试使用它。
  3. JavaAppPackaging.settings将采用您的构建定义,并自动使用您的应用程序的默认值填写mappings in Universal配置。
  4. JavaServerAppPackaging.debianSettings专门为debian添加了其他设置,以便捆绑的默认应用程序可以作为服务器启动。
  5. 该插件的目标之一是允许您灵活地使用任何这些“映射”并获得默认行为或覆盖。它没有详细记录如何。我希望这有帮助!