Spring Boot项目打包Jar报错:no main manifest attribute问题排查
Spring Boot可运行Jar包生成指南(解决"no main manifest attribute"错误)
一、别用IntelliJ的Build Artifacts打包(踩坑预警)
你当前用的Build > Build Artifacts是普通Java项目的打包流程,完全不适配Spring Boot的可执行Jar逻辑——它不会自动处理Spring Boot的依赖打包和Manifest特殊配置,这就是你报错的核心原因。
二、Gradle官方打包方式(最靠谱)
既然用的是Gradle,直接用Spring Boot提供的bootJar任务就行:
- 打开IntelliJ右侧的Gradle面板(没显示的话,按
Ctrl+Shift+A搜索"Gradle"打开) - 展开项目下的
Tasks > build,双击bootJar - 打包完成后,可运行Jar在
build/libs/目录下,文件名格式一般是项目名-版本号.jar
也可以直接在终端执行命令打包:
# Linux/Mac ./gradlew bootJar # Windows gradlew bootJar
这个Jar包自带所有依赖,Manifest里的Main-Class(Spring Boot的JarLauncher)和Start-Class(你的主类)都会自动配置好,直接执行java -jar 文件名.jar就能启动。
三、如果非要用Build Artifacts(不推荐)
硬要走这个流程的话,必须做两个关键配置:
- Artifact配置添加所有依赖:在Artifact设置界面,把项目的所有依赖(包括Spring Boot的starter依赖)都添加到"Output Layout"里,不然Jar包会缺少依赖。
- 修正Manifest属性:Spring Boot的可执行Jar不能直接用你的主类当
Main-Class,必须用Spring Boot的启动器。确保你的MANIFEST.MF里有这两个属性:
同时在Artifact配置里指定Manifest文件路径为Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: 你的主类全路径(比如com.example.backend.BackendApplication)src/main/resources/META-INF/MANIFEST.MF。
四、检查Gradle配置是否冲突
如果你之前手动给Jar任务加了Main-Class配置,建议删掉——Spring Boot插件会自动处理Manifest,手动配置反而会冲突。正确的Gradle插件配置应该是这样:
plugins { id 'org.springframework.boot' version '3.2.0' // 换成你的Spring Boot版本 id 'io.spring.dependency-management' version '1.1.4' id 'java' } // 不需要手动配置jar任务的manifest,Spring Boot插件会自动生成
总结:优先用bootJar任务打包,这是Spring Boot官方指定的方式,完全避免Manifest配置错误的问题。
内容的提问来源于stack exchange,提问作者DR93
相关产品推荐
相关产品推荐

