本节将对Spring Boot源码编译的过程进行说明。从零开始搭建Spring Boot源码阅读环境,搭建阅读环境需要git、JDK8及以上版本(Java开发环境)、IDEA编辑器和Gradle 6.9及以上版本。
关于Spring Boot源码获取需要在GitHub上找到Spring Boot项目仓库并将代码复制到本地,具体操作命令如下:
git clone git@github.com:spring-projects/spring-boot.git
当执行上述命令时有可能会出现如下异常信息(下文异常信息截取部分):
error:unable to create file spring-boot-project/spring-boot-test-autoconfigure/ src/test/java/org/springframework/boot/test/autoconfigure/jdbc/ JdbcTestWithAutoConfigureTestDatabaseReplaceAutoConfiguredWithoutOverrideIntegrationTests. java:Filename too long
当出现上述异常信息时表示文件名称太长了,这个现象在Windows系统中比较常见,原因是git调用的是Windows系统提供的旧API长度限制是260,解决该问题只需要执行git config --global core.longpaths true代码。
当执行完成上述命令后就可以重新执行复制语句,将GitHub上的Spring Boot项目工程拉取到本地,拉取后在本地系统中会有如图1-1所示的内容。
图1-1 Spring Boot本地仓库
接下来需要在该文件夹下打开git bash命令行工具,在命令行工具中输入如下命令:
git branch sh-2.4.6 v2.4.6
上述命令表示创建一个分支,该分支的源头是v2.4.6。执行上述命令后需要执行git branch命令来确定是否创建成功。git branch执行后命令行会输出如下内容:
$ git branch * main sh-2.4.6
从输出内容中可以发现,sh-2.4.6分支已经创建成功。接下来需要切换到该分支,具体切换命令如下:
git checkout sh-2.4.6
最后将这个分支推送到远程仓库,注意该远程仓库是个人远程仓库并非Spring Boot的官方仓库,具体推送命令如下:
$ git push origin sh-2.4.6 Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 remote: remote:Create a pull request for 'sh-2.4.6' on GitHub by visiting: remote: https://github.com/SourceHot/spring-boot/pull/new/sh-2.4.6 remote: To github.com:SourceHot/spring-boot.git * [new branch] sh-2.4.6 -> sh-2.4.6
接下来将介绍如何将Spring Boot源码导入IDEA中,导入过程十分简单,只需要用IDEA将Spring Boot源码文件夹用IDEA打开即可。打开后界面显示内容如图1-2所示。
图1-2 Spring Boot导入IDEA
在打开Spring Boot源码文件夹后IDEA会自动下载Gradle工具,当下载Gradle工具后还会继续下载Spring Boot项目所需要的依赖,此处预计花费一个小时左右的时间。当完成后控制台会输出如下内容:
当看到上述信息后还需要等待十几分钟才可以完成IDEA的导入工作,导入后可以看到IDEA中的显示内容,如图1-3所示。
图1-3 Spring Boot工程明细
从图1-3中可以看到Spring Boot工程被分为了两大重要模块:
(1)spring-boot-project模块主要用于存储Spring Boot框架的核心代码;
(2)spring-boot-tests模块主要用于存储Spring Boot框架的测试代码。
在spring-boot-project模块中还根据不同的功能创建了多个模块工程,关于这些模块工程的说明如下:
(1)spring-boot:Spring Boot项目的核心。
(2)spring-boot-actuator:Spring Boot监控相关的内容。
(3)spring-boot-actuator-autoconfigure:Spring Boot监控中自动装配相关的内容。
(4)spring-boot-autoconfigure:Spring Boot自动装配相关的内容。
(5)spring-boot-cli:Spring Boot CLI命令行工具。
(6)spring-boot-dependencies:Spring Boot依赖工程。
(7)spring-boot-devtools:Spring Boot开发工具工程。
(8)spring-boot-docs:Spring Boot文档工程。
(9)spring-boot-parent:Spring Boot项目的父工程。
(10)spring-boot-properties-migrator:Spring Boot迁移工程。
(11)spring-boot-starters:Spring Boot启动工程。
(12)spring-boot-test:Spring Boot测试相关工程。
(13)spring-boot-test-autoconfigure:Spring Boot测试相关的自动装配工程。
(14)spring-boot-tools:Spring Boot工具工程。
在上述14个模块中,本书主要讨论分析的内容包括spring-boot、spring-boot-actuator、spring-boot-starters和spring-boot-autoconfigure。更多关于Spring Boot子模块的说明可以查看https://docs.spring.io/spring-boot/docs/current/reference/html/using.xhtml#using进行了解。