LoginSignup
1
2

More than 5 years have passed since last update.

Scala:"sbt assembly"でMerging エラーが発生した場合の対処法(sbt 1.0以降)

Posted at

環境

  • Windows10
  • java version 1.8.0_171
  • scala 2.12.3
  • sbt 1.1.6
project\assembly.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7")
project\plugins.sbt
resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7")

javax.mail を組み込むときにはまった。

    "javax.mail" % "javax.mail-api" % "1.5.1",
    "javax.mail" % "mail" % "1.5.0-b01",

sbt assembly で Merging エラー

 sbt assembly
 ↓
[warn] Merging 'META-INF\NOTICE' with strategy 'rename'

対処法(build.sbtに以下を追記)

build.sbt
assemblyMergeStrategy in assembly := {
  case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".properties" => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".xml" => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".types" => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".class" => MergeStrategy.first
  case "application.conf"                            => MergeStrategy.concat
  case "unwanted.txt"                                =>
MergeStrategy.discard
  case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard
  case PathList("META-INF", "mailcap.default") => MergeStrategy.discard
  case PathList("META-INF", "mimetypes.default") => MergeStrategy.discard
 case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}

補足

sbt0.13以前だと

build.sbt
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case "META-INF/MANIFEST.MF" => MergeStrategy.discard
    case x => MergeStrategy.first
  }
}

で対処できた。

ちなみにsbtのバージョンは

sbt about

で確認できる。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2