如何修改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
相关产品推荐
相关产品推荐

