我有一个scala项目,我已经导入了sbt程序集和本机打包程序插件。
现在我可以做sbt assembly
并为我的项目构建一个胖罐。
我想要的是,如果我做sbt dist
那么这个胖罐就会被打包成像zip文件这样的原生格式。
但是,当我为我的项目执行sbt dist
时,它只是构建一个包含所有jar文件的zip文件。它没有选择我的胖罐。
我想要胖罐的原因是sbt dist
盲目地打包所有内容而没有任何合并策略,因此输出失败并出现错误。我的胖罐工作正常,因为我在build.sbt中编写了合并策略。
但我不能用dist命令包装我的胖罐。
答案 0 :(得分:0)
找到答案。将以下内容添加到build.sbt项目设置
// add this on top of file
import com.typesafe.sbt.SbtNativePackager._
// add this to project settings
mappings in Universal := {
// universalMappings: Seq[(File,String)]
val universalMappings = (mappings in Universal).value
val fatJar = (assembly in Compile).value
// removing means filtering
// notice the "!" - it means NOT, so only keep those that do NOT have a name ending with "jar"
val filtered = universalMappings filter {
case (file, name) => ! name.endsWith(".jar")
}
// add the fat jar to our sequence of things that we've filtered
filtered :+ (fatJar -> ("lib/" + fatJar.getName))