2016-11-19 11 views
0

私はsbtアセンブリとネイティブパッケージャプラグインをインポートしたスカラプロジェクトを持っています。sbt DISTとアセンブリコマンドの統合

今私はsbt assemblyを実行することができ、私のプロジェクトのためにファットジャーを構築します。

私が望むのは、sbt distです。このファットジャーは、zipファイルのようなネイティブフォーマットにパッケージ化されたものです。

しかし、自分のプロジェクトにsbt distを実行すると、すべてのjarファイルを含むzipファイルが作成されます。それは私の太った瓶を選ぶことはありません。

私がファットジャーをしたい理由は、sbt distがマージ戦略なしですべてを盲目的にパッケージ化しているため、出力がエラーで失敗するということです。私のファットジャーは、build.sbtでマージ戦略を書いたのでうまく動作します。

しかし、fatコマンドを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)) 
関連する問題