You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sbt Debian插件打包Debian包时,如何指定fat jar源目录?

解决sbt-native-packager Debian打包时找不到正确fat jar路径的问题

我之前也碰到过类似的情况,sbt-native-packager的Debian插件默认的文件查找逻辑有时候会和我们的fat jar生成路径不匹配。针对你的问题,有几种有效的配置方式来指定Debian打包时的源jar路径:

方法一:直接配置Debian映射(Mappings)

最直接的方式是通过mappings in Debian明确指定要打包的fat jar及其在Debian包中的目标路径。假设你用sbt-assembly生成fat jar,在build.sbt中添加以下配置:

lazy val root = (project in file("."))
  .enablePlugins(DebianPlugin, AssemblyPlugin) // 务必启用Assembly插件
  .settings(
    // ... 你的其他项目配置(name、version、mainClass等) ...

    // 指定Debian打包时使用的fat jar
    mappings in Debian ++= {
      // 获取assembly生成的fat jar文件
      val fatJar = (assembly in Compile).value
      // 将fat jar映射到Debian包中的标准路径(/usr/share/项目名/下)
      Seq(fatJar -> s"/usr/share/${name.value}/${fatJar.getName}")
    },

    // 确保Debian打包任务依赖于assembly任务,先生成fat jar再执行打包
    packageBin in Debian := (packageBin in Debian).dependsOn(assembly in Compile).value
  )

这个配置会把sbt-assembly生成的fat jar添加到Debian包的映射中,同时保证打包流程先完成fat jar的生成。

方法二:覆盖默认映射(替换默认jar)

如果默认的Debian映射中已经包含了普通jar文件,你可以先过滤掉这些默认jar,再添加你的fat jar:

mappings in Debian := {
  val fatJar = (assembly in Compile).value
  // 过滤掉默认的jar文件
  val defaultMappings = (mappings in Debian).value.filterNot { case (_, path) => path.endsWith(".jar") }
  // 添加fat jar到映射列表
  defaultMappings :+ (fatJar -> s"/usr/share/${name.value}/${fatJar.getName}")
}

方法三:调整插件的默认jar查找路径

另一种方式是修改Debian插件使用的packageBin任务的源,让它指向你的fat jar路径:

// 让Debian插件的packageBin任务使用assembly生成的jar
packageBin in Debian := {
  val fatJar = (assembly in Compile).value
  // 确保Debian插件基于这个fat jar构建包
  val originalDebianTask = (packageBin in Debian).dependsOn(assembly in Compile).value
  originalDebianTask
}

关键说明

  • 如果你用sbt-assembly生成fat jar,必须启用AssemblyPlugin,否则assembly任务会不存在。
  • name.value会自动读取你项目中配置的name值,也可以手动替换成固定的路径字符串。
  • 配置完成后,直接运行sbt debian:packageBin即可,插件会正确找到你指定的fat jar路径。

内容的提问来源于stack exchange,提问作者schatter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:56:28