Spring Boot打包后自定义自动配置未加载,根本原因是META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件缺失或内容错误,导致Spring Boot无法发现并注册配置类;需检查该文件是否包含全限定名、Maven插件是否误删资源、starter模块packaging是否为jar、以及启动类扫描范围是否覆盖。

SpringBoot项目中自定义了自动配置类并完成本地测试,但打包成jar后启动时发现自定义配置完全没被加载,@Bean未注册、属性未绑定、条件注解失效——这说明打包过程切断了自动配置的发现路径。
确认自动配置类是否被正确声明
打开项目资源目录 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 3.2+ 推荐路径),检查是否包含你的自动配置类全限定名,例如:
com.example.myautoconfigure.MyAutoConfiguration
若文件不存在或内容为空,Spring Boot 启动时根本不会扫描该类,所有 @ConditionalOnClass、@ConditionalOnProperty 都不会触发。
旧版(Spring Boot 2.x)使用的是 META-INF/spring.factories,格式为:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.myautoconfigure.MyAutoConfiguration
【必须严格使用 LF 换行符,Windows 的 CRLF 会导致解析失败】
检查打包插件是否排除了配置元数据
在 pom.xml 中定位 spring-boot-maven-plugin 配置,确认没有启用 <skip>true</skip> 或 <excludeDevtools>true</excludeDevtools> 等可能误删资源的设置。
特别注意:如果项目使用了 <resources> 自定义过滤,要确保 META-INF/spring/ 目录未被 exclude 或被 Maven Resource Filtering 错误转义(如 ${} 占位符导致内容损坏)。
执行以下命令验证 jar 包内是否包含配置声明:
jar -tf target/your-app.jar | grep "spring.*imports|spring.factories"
验证类路径下是否存在自动配置类字节码
第一步:解压 jar 包查看 BOOT-INF/classes 路径
unzip -q target/your-app.jar -d /tmp/unpacked
第二步:确认你的自动配置类已编译并落盘
ls /tmp/unpacked/BOOT-INF/classes/com/example/myautoconfigure/MyAutoConfiguration.class
第三步:若该 .class 文件不存在,说明模块未参与编译——检查该自动配置是否定义在独立 starter 模块中,而主应用模块的 pom.xml 未正确依赖该 starter,或 starter 的 <packaging> 错误设为 pom 而非 jar。
【starter 模块 packaging 必须为 jar,设为 pom 将导致其 src/main/java 下代码完全不编译】
排查启动类扫描范围遗漏
方法一:显式启用组件扫描
在主启动类上添加 @ComponentScan(basePackages = "com.example.myautoconfigure"),强制纳入自定义包。
方法二:改用 @Import 注册(适用于调试阶段)
在启动类上直接添加:
@Import(MyAutoConfiguration.class),绕过自动发现机制,验证该类本身能否正常初始化。
方法三:检查是否启用了 @EnableAutoConfiguration(exclude = …) 或 spring.autoconfigure.exclude 属性,意外屏蔽了你的配置类。

















