如何搭建自己的 Spring Initializr 服务

背景

对于 Spring Boot 开发者来说,官方的 Spring Initializr 服务(start.spring.io)应该并不陌生。我们可以通过它快速选择 Spring Boot 版本、项目类型和依赖,生成一个新的 Spring Boot 项目。

不过,在实际使用过程中,我遇到了两个比较明显的问题。

首先,官方 Initializr 中的 Spring Boot 历史版本并不会一直保留。随着新版本发布,旧版本可能会从可选版本列表中移除。刚发布的新版本可能还不太敢使用,但想继续使用之前的稳定版本时,又发现无法通过官方 Initializr 创建项目。

其次,官方的 start.spring.io 服务部署在海外,在国内访问时偶尔会遇到网络连接失败或访问不稳定的问题。

好在 Spring Initializr 本身是一个开源项目,我们可以直接使用官方源码,在本地搭建一套属于自己的 Spring Initializr 服务。这样既可以解决网络访问问题,也可以根据自己的需要保留和配置特定的 Spring Boot 版本。

这篇文章就带大家一起把官方的 Spring Initializr 服务在本地运行起来。

前期准备

在开始之前,你需要有以下准备:

  • 一个能够正常访问 GitHub 的网络环境。
  • 具备基本的 Git 使用经验。
  • 本地已安装 JDK 17 或更高版本。

如果你已经准备好了,那么就开始跟着后续步骤开始吧!

具体操作

1. 克隆项目

Spring Initializr 的 GitHub 仓库链接为: spring-io/start.spring.io

执行以下命令克隆项目:

bash
复制代码
git clone https://github.com/spring-io/start.spring.io.git

运行结果:

image.png

2. 回退项目版本

为了方便使用 Git,这里我用的是 IDEA 的图形化界面代替命令行。

首先用 IDEA 打开此项目,遇到 Maven 报错请先忽略,因为你本地还没有当前项目所需依赖,因此报错是正常的。

这里让 Spring Initializr 支持某个历史版本的原理是将项目源码回退到对应的历史提交。因为 Spring Boot 版本及相关元数据都随着项目源码的提交记录不断变化,回退到旧提交后,我们就可以恢复当时的版本配置。

从 Git 提交历史来看,相关版本配置是在某次提交中被移除的:

image.png

截至 2026 年 9 月 11 日,官方的 Spring Initializr 已经无法再创建 Spring Boot 3 项目。本文以恢复 Spring Boot 3的最后一个版本为例进行演示,你也可以按照相同的方法,根据需要回退到其他历史提交。

为了避免直接在 main 分支上进行修改,建议先从 main 分支创建一个新的本地分支,例如我这里新建的分支为 springboot3

image.png

现在我想回退到这次提交:

image.png

然后选中目标提交,右键选择“将当前分支重置到此处”:

image.png

这里我选择的是“硬重置(Hard)”。由于当前是刚刚克隆下来的项目,本地没有需要保留的修改,因此可以直接使用硬重置。如果你的工作区中已经存在未提交的修改,请谨慎选择重置方式,以免丢失本地代码。

image.png

当前项目的代码库回退到指定分支后,接下来就准备编译了。

3. 编译项目

这里使用项目自带的 Maven Wrapper。你也可以使用本机安装的 Maven,但为了避免 Maven 版本差异带来的问题,建议优先使用项目自带的 Wrapper。

⚠注意:

在正式编译项目之前,请检查一下本机是否配置了 Maven 镜像。

我在实际编译过程中发现,若使用阿里云 Maven 镜像时,部分项目依赖无法正常下载。

例如:

image.png

如果你也遇到了类似的依赖解析失败问题,可以暂时移除或注释掉阿里云镜像配置,让 Maven 直接从 Maven Central 下载依赖。

如果你的环境没有配置阿里云镜像,或者依赖可以正常下载,则无需进行额外修改。

在当前项目的根目录下执行以下命令:

bash
复制代码
./mvnw clean package "-Dmaven.test.skip=true"

⚠提示:

在 Powershell 中,-Dmaven.test.skip=true 需要用 "'包裹起来。

接下来等待 Maven 下载依赖并完成项目构建即可。

构建成功后,可以看到类似下面的输出:

image.png

4. 运行项目

找到这个文件:start.spring.io/start-site/target/start-site-exec.jar

然后运行它:

image.png

随后你可以通过 http://localhost:8080 访问你本地的 Spring Initializr 服务:

image.png

你也可以将此链接替换在 IDEA 中默认的 https://start.spring.io

image.png

image.png

5. 更进一步

此项目你只需要关注以下模块:

  • start-client :这是Spring Initializr 的前端工程,基于 React 开发的;
  • start-site :这是Spring Initializr 的后端工程,是一个 Spring Boot 应用。

如果你动手能力强,还可以根据自己需求对此项目进行自定义。

然后将打包好的 JAR 包部署到自己的服务器上,你就拥有了一套属于自己的 Spring Initializr 服务。

最后

本文的内容受 构建自己的 Spring Initializr 服务 - Spring 中文网 启发。在实际跟着文章操作的过程中,我又遇到了一些新的问题,于是一边踩坑、一边排查,最终把整个过程整理成了这篇可以复现的操作记录。

可能有人会问:有必要这么折腾吗?直接基于最新的 Spring Boot 项目修改一下版本号,不也可以吗?

当然可以。

但我个人还是更倾向于使用 Spring Initializr 官方提供的项目配置。不同 Spring Boot 版本之间可能存在各种依赖、插件以及配置上的差异,直接修改版本号虽然简单,但遇到问题时往往还需要自己逐个排查。

在折腾完之后,我有了只属于我自己的 Spring Initializr 服务。无论 Spring Initializr 官方如何升级,如何淘汰老版本,我都有一份历史版本留存!

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP