运行Spring Boot打包的jar时提示META-INF/spring.factories无自动配置类错误
Spring Boot Gradle打包报错"No auto configuration classes found in META-INF/spring.factories"解决方案
该错误本质是你使用了普通Gradle jar任务打包,生成的jar仅包含项目自身代码,没有Spring Boot可执行jar所需的依赖包、启动引导结构和自动配置文件,仅指定mainClassName无法解决根本问题。
1. 修正build.gradle配置
Spring Boot 2.5+版本推荐将启动类配置统一放到springBoot块,同时禁用普通jar任务避免打包出无效文件,修正后的完整配置如下:
plugins { id 'org.springframework.boot' version '2.5.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example.app' version = '0.0.1-SNAPSHOT' // 如果你确定要用JDK14编译可改为14,当前配置兼容JDK11及以上版本 sourceCompatibility = '11' repositories { mavenCentral() } springBoot { // 这里替换为你实际的主启动类全限定名,需保证路径完全匹配 mainClass.set('com.example.ExampleApplication') } jar { // 禁用普通jar任务,避免生成不含依赖的无效jar enabled = false } bootJar { // 可选配置:直接指定打包输出文件名为main.jar,无需手动改名 archiveFileName.set('main.jar') } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-webflux' compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' annotationProcessor 'org.projectlombok:lombok' }
2. 执行正确的打包命令
不要使用gradle jar命令打包,需使用Spring Boot提供的bootJar任务:
# 清理旧构建产物 ./gradlew clean # 执行Spring Boot可执行jar打包 ./gradlew bootJar
3. 运行验证
打包完成后生成的jar文件默认在build/libs目录下,执行以下命令启动:
java -jar build/libs/main.jar
异常排查
如果修改后仍报错,请检查以下项:
- 确认主启动类
com.example.ExampleApplication真实存在,且类上添加了@SpringBootApplication注解 - 解压生成的main.jar文件,确认存在
BOOT-INF/classes/com/example/ExampleApplication.class文件 - 确认
META-INF/spring.factories文件存在,且包含自动配置相关条目
内容的提问来源于stack exchange,提问作者hasanghaforian
相关产品推荐
相关产品推荐

