You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SBT打包WAR文件报错:重复条目META-INF/MANIFEST.MF

解决xsbt-web-plugin打包WAR时的META-INF/MANIFEST.MF重复错误

这个重复MANIFEST.MF的问题在使用xsbt-web-plugin打包WAR时挺常见的,我来帮你一步步排查和解决:

第一步:找出重复文件的来源

要解决问题,首先得明确到底有哪些地方生成或包含了这个重复的MANIFEST.MF:

  • 执行sbt "show packageBin::mappings"命令,这个会列出所有要打包到WAR里的文件及其源路径。直接搜索META-INF/MANIFEST.MF,就能看到所有重复的条目。
  • 如果输出太多,可以用过滤命令简化:Linux/macOS用sbt "show packageBin::mappings" | grep MANIFEST.MF,Windows在PowerShell里用sbt "show packageBin::mappings" | Select-String MANIFEST.MF。
  • 另外检查你的项目中是否手动添加了src/main/resources/META-INF/MANIFEST.MF,如果有,很大概率是它和sbt自动生成的MANIFEST冲突了。

第二步:针对性解决问题

根据排查出的原因,选择对应的解决方法:

情况1:手动MANIFEST和自动生成的冲突

如果你自己在项目里放了MANIFEST.MF,直接禁用sbt的自动生成即可:

// 指定使用你自己的MANIFEST文件
packageOptions += Package.Manifest(new File("src/main/resources/META-INF/MANIFEST.MF"))
// 或者如果只是需要自定义属性,禁用默认生成后手动添加属性
packageOptions -= Package.ManifestAttributes()
packageOptions += Package.ManifestAttributes(
  "Main-Class" -> "com.your.package.Main",
  "Implementation-Version" -> "1.2-SNAPSHOT"
)

情况2:依赖jar里的MANIFEST被错误打包到WAR根目录

有时候某些依赖的MANIFEST会被意外提取到WAR的META-INF下,和项目生成的重复。可以通过过滤映射来排除重复的文件:

webappMappings ~= { mappings =>
  mappings.filterNot { case (file, path) =>
    // 替换成你从mappings里看到的重复文件的路径标识
    path == "META-INF/MANIFEST.MF" && file.getAbsolutePath.contains("problematic-dependency.jar")
  }
}

情况3:需要打Fat WAR(结合sbt-assembly)

如果你想把依赖直接打包到WEB-INF/classes而不是WEB-INF/lib,结合sbt-assembly时可以配置合并策略来丢弃重复的MANIFEST:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard
  // 其他重复文件的合并策略,比如保留第一个出现的
  case x => MergeStrategy.first
}

之后用sbt assembly生成Fat WAR即可(注意确保xsbt-web-plugin和sbt-assembly版本兼容)。

情况4:依赖重复引入

有时候重复的MANIFEST来自重复引入的依赖,用sbt dependencyTree查看依赖树,找到重复的依赖后排除:

libraryDependencies += "com.example" % "your-dependency" % "1.0" exclude("org.unwanted", "duplicate-dep")

最后别忘了先执行sbt clean清空缓存,再重新打包,很多时候缓存文件也会导致这类重复问题。

内容的提问来源于stack exchange,提问作者Atais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:33