SBT 准备 WAR 文件,重复条目:META-INF/MANIFEST.MF

SBT prepare WAR file, duplicate entry: META-INF/MANIFEST.MF

我正在尝试将我的应用程序的一个模块打包到 war 中。 我选择了 xsbt-web-plugin 来帮助我。

我已经准备好了sbt,我猜对了:

lazy val `my-project` = (project in file("my-project"))
                         ...
                         .enablePlugins(TomcatPlugin)

但在 sbt package 期间我收到此错误:

[info] Packaging /home/siatkowskim/Documents/....target/scala-2.11/my-project_2.11-1.2-SNAPSHOT.war ...
[error] java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF

我很熟悉 sbt-assembly 但我看不到这里有重复数据删除的方法。 我什至如何调试,它是从哪里复制的?或者如何解决这个重复?

原来我的类路径中有 MANIFEST.MF 文件。 我不知道它是做什么用的,但删除它解决了问题。

我有同样的问题,但我的类路径中没有明显的 MANIFEST.MF 文件。我只能假设它来自包含的大量 .jar 文件。

以下解决了问题:

assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) =>
  (xs map {_.toLowerCase}) match {
    case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) => MergeStrategy.discard
    case _ => MergeStrategy.last
  }
}

请参阅 了解双冒号符号的含义。