运行Fat Jar时无法排除DataSourceAutoConfiguration类问题求助
问题排查与解决方案
核心原因
你自定义的Gradle jar 任务没有遵循Spring Boot Fat Jar的规范结构,导致Spring Boot无法识别DataSourceAutoConfiguration为合法的自动配置类——官方Spring Boot打包插件会自动处理自动配置元数据(如META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件),而自定义打包逻辑遗漏了这些关键元数据的正确加载。
推荐解决方案:使用Spring Boot官方Gradle插件
这是Spring Boot项目打包Fat Jar的标准方式,能自动处理所有依赖、元数据和类加载逻辑,彻底解决此类问题。
修改build.gradle配置
替换你当前的自定义jar任务,改为以下配置:
plugins { id 'java' // 引入Spring Boot插件(替换为你的Spring Boot对应版本) id 'org.springframework.boot' version '3.2.0' // 引入依赖管理插件,自动处理Spring Boot依赖版本 id 'io.spring.dependency-management' version '1.1.4' } group = '你的项目组ID' version = '你的项目版本' java { sourceCompatibility = '17' // 根据你的JDK版本调整,如1.8、11等 } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' // 添加你的其他业务依赖 } // 配置Spring Boot Fat Jar打包任务,指定主类 bootJar { mainClass = 'com.example.MainClass' // 替换为你的MainClass全限定类名 }
打包与运行
执行Gradle命令打包:
./gradlew bootJar
打包后的Jar文件位于build/libs/目录下,运行时执行:
java -jar build/libs/你的项目名称-版本.jar
若坚持自定义打包(不推荐)
如果必须使用自定义jar任务,需补充以下关键配置:
- 正确配置主类到Manifest:
manifest { attributes 'Main-Class': 'com.example.MainClass' // 替换为你的主类全路径 } - 确保打包时保留Spring Boot自动配置元数据文件,不要排除
META-INF/spring/目录下的文件 - 处理类加载逻辑,确保Spring Boot能正确扫描到自动配置类(此方式复杂度高,容易引发其他类加载问题)
内容的提问来源于stack exchange,提问作者Ink Oveflow
相关产品推荐
相关产品推荐

