SpringBoot2 构建的 Starter 在 SpringBoot3 中引用的话会启动报错。
原因:spring.factories 的写法已废弃。
流传于网络的几乎所有教程已然成过期攻略。
然而 Spring 官方把这个 change log 放在了 3.0.0-M5 版本,真让人一阵好找:
原文部分:
Auto-configuration Registration
Spring Boot 2.7 introduced a new META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports file for registering auto-configurations, while maintaining backwards compatibility with registration in spring.factories. With this release, support for registering auto-configurations in spring.factories has been removed in favor of the imports file.
下面贴出 2.x 版写法和 3.0 版本作对比。
SpringBoot 2.x 写法
文件目录:
resources
└── META-INF
└── spring.factories
其中 spring.factories 内容(示例):
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.looko.demomavenstarter.config.DemoMavenAutoConfiguration
Spring 3.0 写法
文件目录:
resources
└── META-INF
└── spring
└── org.springframework.boot.autoconfigure.AutoConfiguration.imports
其中 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件内容(示例):
org.looko.demomavenstarter.config.DemoMavenAutoConfiguration
另外要注意如果用 IDEA 基于 SpringBoot 项目去写 SpringBootStarter 时,除了不需要启动类外,还要删除 pom.xml 里的 <build></build> 标签。