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

如何在sbt dist生成的target/universal/scripts中添加额外文件?

嘿,我知道你想把自定义文件放到sbt dist生成的target/universal/scripts目录里,而不是只让它们待在zip包中——之前用mappings in Universal的写法没达到预期,大概率是路径配置的问题,我来给你梳理正确的做法:

解决方法

首先确认你的项目已经引入了sbt-native-packager插件(毕竟dist命令是它提供的),如果还没加,在project/plugins.sbt里添加:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.9.16")

方式1:文件同时出现在target/universal/scripts和zip包中

这是最常用的场景——你的自定义脚本既会被放到解压后的scripts目录,也会包含在最终的zip压缩包里。在build.sbt中添加如下配置:

// 把项目根目录下scripts文件夹里的所有文件,映射到target/universal/scripts目录
mappings in Universal ++= (baseDirectory.value / "scripts" * "*").get.map { sourceFile =>
  sourceFile -> s"scripts/${sourceFile.getName}"
}

解释一下:

  • baseDirectory.value / "scripts" * "*":定位到你项目根目录下的scripts文件夹里的所有文件
  • sourceFile -> s"scripts/${sourceFile.getName}":指定目标路径为scripts/开头,这样sbt会把文件同时放到target/universal/scripts和zip包内的scripts目录

方式2:只让文件出现在target/universal/scripts(不进入zip包)

如果你有特殊需求,不想把这些文件打包到zip里,只是放到本地的target/universal/scripts目录,可以用extraUniversalFiles配置:

extraUniversalFiles ++= (baseDirectory.value / "scripts" * "*").get.map { sourceFile =>
  sourceFile -> s"scripts/${sourceFile.getName}"
}

运行sbt clean dist之后,你就能看到自己的文件乖乖出现在target/universal/scripts目录里啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:03:12