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

