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

如何修改SBT Native Packager配置将ZIP包输出至target目录

解决SBT打包输出路径问题:将ZIP包生成在target根目录

问题描述

我当前的build.sbt配置如下:

name := "DB-Services"
version := "0.1"
scalaVersion := "2.12.12"
lazy val root = (project in file(".")).enablePlugins(UniversalPlugin,JavaServerAppPackaging)
artifactName := { (_, _, _) => "DB-Services.zip"}
Universal / mappings ++= directory(target.value)

执行sbt package命令后,生成的DB-Services.zip文件位于target/scala-2.12目录下。但由于CI/CD流程限制,我需要将该ZIP包直接生成在target根目录中。目前添加的映射配置并未生效,ZIP包仍输出至原路径,请问需要对build.sbt做出哪些修改才能实现这一需求?


解决方案

你遇到的核心问题是Universal插件的默认输出路径限制——它默认会把打包产物放到target/scala-2.12/universal下,最终被sbt package整合到对应scala版本的目录里。只调整映射配置不会改变最终输出的位置,我们需要修改Universal插件的输出目录配置。以下是修改后的完整build.sbt:

name := "DB-Services"
version := "0.1"
scalaVersion := "2.12.12"

lazy val root = (project in file("."))
  .enablePlugins(UniversalPlugin, JavaServerAppPackaging)

// 自定义ZIP包的名称
artifactName := { (_, _, _) => "DB-Services.zip" }

// 修改Universal插件的输出目录为项目根目录下的target文件夹
Universal / target := baseDirectory.value / "target"

// 如果你需要将target目录下的内容打包进ZIP,保留这行(建议按需调整目录,避免冗余)
Universal / mappings ++= directory(target.value)

关键修改说明:

  • Universal / target := baseDirectory.value / "target":这是核心修改,它强制Universal插件将打包后的产物直接输出到项目根目录的target文件夹,而不是默认的target/scala-2.12/universal路径。
  • 保留artifactName配置确保生成的ZIP包名称符合你的需求。
  • 注意:directory(target.value)会把整个target目录的内容都打包进去,可能包含编译临时文件、其他插件产物等冗余内容。建议根据实际需求调整为特定子目录,比如target.value / "classes"(编译后的类文件),避免打包不必要的文件。

修改完成后,执行sbt universal:packageZipTarball(推荐明确调用Universal插件的打包任务),生成的DB-Services.zip就会直接出现在target根目录下了。如果习惯用sbt package,这个命令也会同步把ZIP包输出到target根目录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:02:31