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

重新打包Spring Boot应用后启动报错:缺少主清单属性

解决Spring Boot Jar重新打包后"no main manifest attribute"错误

这个问题很常见——你用普通的jar命令重新打包时,破坏了Spring Boot可执行Jar的特殊结构和启动配置,导致Java找不到应用入口类。

为什么会出错?

Spring Boot的可执行Jar不是普通的JAR文件:它有专门的目录结构(比如BOOT-INF/classes存放你的业务代码、BOOT-INF/lib存放依赖包),并且META-INF/MANIFEST.MF里包含关键的启动配置,示例如下:

Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.servingwebcontent.ServingWebContentApplication

你用jar cf命令打包时,既没有保留这个manifest的核心配置,还可能打乱了目录层级,导致Spring Boot的启动加载器无法正常工作。

正确的解决方法

方法1:用Spring Boot官方构建插件重新打包(推荐)

这是最稳妥的方式,Spring Boot的Maven/Gradle插件会自动处理所有打包细节:

  • 如果你用Maven,在项目根目录执行:
    mvn clean package
    
  • 如果你用Gradle,执行:
    gradle clean bootJar
    

执行完成后,target目录下生成的Jar就是可正常运行的可执行Jar。

方法2:手动修复打包(应急场景,不推荐)

如果你确实需要手动修改Jar内容后重新打包,按以下步骤操作:

  1. 解压Jar后,检查META-INF/MANIFEST.MF文件,确保包含上述的Main-Class和Start-Class属性(Start-Class是你自己的Spring Boot主类全限定名)。
  2. 重新打包时,必须指定使用这个manifest文件,使用cmf参数:
    jar cmf META-INF/MANIFEST.MF gs-serving-web-content-0.1.0.jar *
    
    注意:执行命令时要在解压后的根目录下,确保BOOT-INF、META-INF、org这些目录都在当前路径下。

总结

尽量避免用普通jar命令处理Spring Boot的可执行Jar,官方构建插件会帮你处理所有复杂的打包逻辑,大幅减少出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:30