2016-11-19 124 views
0

我有一个scala项目,我已经导入了sbt汇编和本地打包器插件。集成sbt DIST和汇编命令

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

我的愿望是,如果我做sbt dist那么这个胖jar就是打包成一个本地格式,如zip文件。但是,当我为我的项目执行sbt dist时,它只是生成一个包含所有jar文件的zip文件。它不接我的胖罐子。

我之所以想胖罐子是,sbt dist是一味的包装都没有任何合并策略,因此输出失败的错误。我的fat jar工作正常,因为我在build.sbt中编写了合并策略。

但我无法用dist命令打包我的胖罐子。

回答

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