SpringBoot2 构建的 Starter 在 SpringBoot3 中引用的话会启动报错。

原因:spring.factories 的写法已废弃

流传于网络的几乎所有教程已然成过期攻略。

然而 Spring 官方把这个 change log 放在了 3.0.0-M5 版本,真让人一阵好找:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M5-Release-Notes

原文部分:

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> 标签。