集成sbt DIST和汇编命令

时间:2016-11-19 06:44:48

标签: scala sbt

我有一个scala项目,我已经导入了sbt程序集和本机打包程序插件。

现在我可以做sbt assembly并为我的项目构建一个胖罐。

我想要的是,如果我做sbt dist那么这个胖罐就会被打包成像zip文件这样的原生格式。

但是,当我为我的项目执行sbt dist时,它只是构建一个包含所有jar文件的zip文件。它没有选择我的胖罐。

我想要胖罐的原因是sbt dist盲目地打包所有内容而没有任何合并策略,因此输出失败并出现错误。我的胖罐工作正常,因为我在build.sbt中编写了合并策略。

但我不能用dist命令包装我的胖罐。

1 个答案:

答案 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))