assemblyPackageDependency用のassemblyMergeStrategyを入れる
以前,sbtでfat-jarを作る時に,毎回全ファイルのjarを作るのを止めて作業を効率化する方法を紹介したのですが,
ScalaでSparkのプログラムを作る作業を高速化する. - なぜか数学者にはワイン好きが多い
こんなエラーが出ることがあります.
[error] 426 errors were encountered during merge [error] stack trace is suppressed; run 'last assemblyPackageDependency' for the full output [error] (assemblyPackageDependency) deduplicate: different file contents found in the following: [error] \null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\poi\poi\5.0.0\poi-5.0.0.jar:META-INF/versions/9/module-info.class [error] \null\Coursier\cache\v1\https\repo1.maven.org\maven2\org\apache\xmlbeans\xmlbeans\4.0.0\xmlbeans-4.0.0.jar:META-INF/versions/9/module-info.class
重複ファイルのエラーが出るときは,build.sbtに以下のような記述を入れる:
assemblyMergeStrategy in assemblyPackageDependency := { case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first case PathList(ps @ _*) if ps.last endsWith ".class" => MergeStrategy.first case "UnusedStubClass.class" => MergeStrategy.first case "application.conf" => MergeStrategy.concat case "unwanted.txt" => MergeStrategy.discard case x => val oldStrategy = (assemblyMergeStrategy in assembly).value oldStrategy(x) }
記述の中身は,ドキュメント
GitHub - sbt/sbt-assembly: Deploy über-JARs. Restart processes. (port of codahale/assembly-sbt)
のMerge Strategyの記載を参考に,適宜変更してほしい.