很多同学第一次打开 Spring Initializr 页面时,第一反应大概率是:选项也太多了吧。构建工具选 Maven 还是 Gradle,语言是 Java 还是 Kotlin,Spring Boot 版本到底跟不跟最新,依赖那一长串列表里到底选什么——还没开始写代码,光是在这一屏配置上就能纠结二十分钟。尤其是想快速上手 Spring Boot 3.x 的新人,面对这套全新的版本体系,稍不留神就会生成一个启动报错的项目。
这个系列前面两篇已经聊过 Spring Boot 的整体轮廓和生态组件,今天这篇就落到实操最前端:用 Spring Initializr 把 Spring Boot 3.x 项目骨架搭起来。Spring Initializr 并不是一个普通的“脚手架模板”,它背后带有一套完整的版本兼容校验和依赖管理逻辑,理解清楚它,你后续每一次新建项目、升级版本都会顺很多。这篇文章会覆盖创建项目的全部路径、关键配置项的选择逻辑、生成后的目录结构解读、本地运行验证,以及我这两年带项目时实测踩过的几个高频坑。不管你是刚入门想跑通第一个接口,还是团队里要统一项目生成规范,这篇都值得收藏着按步骤走一遍。
1. Spring Boot 3.x 的版本变化,以及为什么必须用 Initializr
1.1 3.x 相比 2.x 的三个核心差异
如果你之前用过 Spring Boot 2.x,直接切到 3.x 的时候会明显感到三处不同。
第一,Java 版本基线直接从 Java 8 跳到了 Java 17。这是很多人第一次创建 3.x 项目时最容易踩的坑:明明本机有 JDK 8,生成的代码一编译就报错。Spring Framework 6 和 Spring Boot 3.x 的底层字节码全部基于 Java 17 构建,这意味着你本机、CI 服务器、部署环境都必须是 JDK 17 或者更高版本,低于这个版本连依赖都拉不下来。
第二,javax 命名空间整体迁移成了 jakarta。过去写 import javax.servlet.http.HttpServletRequest,Spring Boot 3.x 里要改成 import jakarta.servlet.http.HttpServletRequest。这个迁移对老项目来说是笔不小的改造工作量,但对新项目反而是好事——你从一开始就站在了正确的命名空间上,以后跟着版本升级不会遇到兼容性烂摊子。
第三,对 GraalVM 原生镜像的支持从实验性变成了正式能力。Spring Boot 3.x 可以把应用直接编译成原生可执行文件,启动时间从秒级缩短到毫秒级,内存占用也大幅下降。虽然原生镜像目前还不适合所有场景,但它标志着 Spring Boot 的部署形态开始分化:传统 JVM 模式和云原生模式并行。如果你创建项目时看到 Native Build Tools 相关选项,不要慌,默认不勾选就完全不受影响。
这些变化叠加在一起,意味着在 Spring Boot 3.x 时代,你不能再靠“从旧项目复制一份改改”的老办法来建项目了。最稳妥、最省事的路径就是用 Spring Initializr 从源头生成一个干净、兼容、版本正确的骨架。
1.2 Initializr 解决的远不止“生成目录”这么简单
很多人容易把 Spring Initializr 理解成“一个帮你创建文件夹和代码模板的工具”,这个认知不仅片面,还挺危险。Spring Initializr 真正的价值在于:它会根据你选择的 Spring Boot 版本,自动校验依赖之间的兼容组合关系。
举个例子,你在网页上同时勾选了 spring-boot-starter-data-jpa 和 spring-boot-starter-security,然后在 Spring Boot 3.2.x 版本下生成,Initializr 给出的依赖版本都是经过官方测试矩阵验证的。但如果你自己从网上找一篇博客照着复制 pom 依赖,很可能把 2.7 版本的 spring-boot-starter-parent 和 3.2 版本的某个 starter 混在一起,最终项目能正常编译,启动时报一堆 ClassNotFoundException,排查起来极其痛苦。
另外,Spring Initializr 本身也是一个开源项目,它提供的服务不光是网页端,还开放了 HTTP API。这意味着你可以把它接入到自己的内部平台、命令行工具、甚至 IDE 插件里,让团队每个人创建出来的项目都遵循同一套规范和依赖基线。对技术管理者来说,这是一件很值得投入的事情:与其在团队 wiki 里写一堆“新建项目时请选择某某版本、某某依赖”,不如统一封装一套生成脚本,让 Initializr 从源头兜底。
从 2014 年 Spring Initializr 上线到现在,它已经成了 Spring 生态里使用率最高的工具之一,原因不是它界面有多惊艳,而是它真正把“项目初始化”这件看似简单、实则充满版本兼容暗坑的事情,做成了标准化流水线。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建项目的四条路径,选一条顺手的就别纠结了
2.1 start.spring.io 网页版:最直观,适合新手和快速验证
网页版的入口是 start.spring.io,我用它创建项目已经不下几百次了。它最大的优点是所见即所得:左边一排配置项,右边实时显示项目类型、语言、Spring Boot 版本和依赖列表,中间底部甚至能预览生成后的项目结构。
操作流程很简单:左侧填好 Group(通常是公司域名倒写,比如 com.example)、Artifact(项目名,比如 demo),选好构建工具、语言、Spring Boot 版本和 Java 版本,右侧点击“ADD DEPENDENCIES”搜索并添加你要的 starter 依赖,最后点“GENERATE”按钮,浏览器就会下载一个 zip 压缩包。解压后用 IDE 打开,项目直接能用。
这里有一个小技巧:网页版右上角的依赖搜索框里输入关键词,会展示所有包含该关键词的 starter 及其简短描述。但一定要注意,有些依赖名称看着相似,实际用途完全不同。比如你输 web,会看到 Spring Web 和 Spring Web Services,前者是构建 MVC 和 RESTful API 的核心,后者主要用于 XML 格式的 SOAP Web Service。新手如果不细看就勾选,项目里会混进一堆用不到的类库。
2.2 IDEA 内置的 Spring Initializr 向导
如果你用的是 IntelliJ IDEA,新建项目时左侧选择“Spring Initializr”或者新版 IDEA 里的“Spring Boot”,本质上调用的还是 start.spring.io 的服务。它和网页版的配置项几乎一一对应,区别只在于生成的目录会直接落在你的工程里,IDEA 会自动识别为 Maven 或 Gradle 项目,省去了下载 zip、解压、再导入的步骤。
但用 IDEA 内置向导有两点要留意。第一,IDEA 版本会缓存部分 Spring Boot 版本列表,偶尔会滞后于官网。如果你在网页版上看到某个刚发布的新版本,IDEA 里却迟迟不显示,别慌,这通常不是版本没发布,而是 IDEA 的版本列表还没刷新。第二,如果你在无网络环境或者公司内网部署了私有 Nexus 仓库,IDEA 内置向导可能连不上 start.spring.io,此时要用网页版生成 zip,然后手动移到目标机器上解压导入,或者干脆用后面提到的命令行方式。
2.3 用 curl 一行命令创建:适合脚本化和团队标准化
很多人不知道,start.spring.io 不只是网页,它的背后是一套 REST API。你完全可以用命令行来生成项目:
bash复制curl -s https://start.spring.io/starter.zip \
-d type=maven-project \
-d language=java \
-d bootVersion=3.3.1 \
-d groupId=com.example \
-d artifactId=demo \
-d name=demo \
-d packageName=com.example.demo \
-d
