引言
作为一个合格的程序员,想要进阶,源码阅读是不可避免的,其中spring的源码是必读之一,但是spring源码环境使用的gradle对一些经常使用maven的程序员来说是比较陌生的,那么接下来我这边文章就可以指导大家很快的将spring源码环境搭建起来,让大家可以愉快的进阶,篇末有彩蛋。
环境准备
- IntelliJ IDEA 2019.3.3
- gradle
- JDK 1.8
- Spring Framework源码
安装步骤
这里只关注spring源码下载和gradle安装,默认idea和jdk是已有基础环境
Spring Framework源码下载
1. 下载地址
https://github.com/spring-projects/spring-framework
2. 版本选择
进入到spring源码的git空间,选择你先学习的tags版本即可,一般选择最新的RELEASE版本
3. 下载源码
点击code中的zip包下载
gradle安装
1. gradle版本确定
gradle安装版本可以在spring源码的gradle/wrapper/gradle-wrapper.properties中查看
2. 下载gradle
方法一:
使用gradle-wrapper.properties的distributionUrl可以直接下载对应版本的gradle,注意需要删除https后面的 \ 符号,正确链接:https://services.gradle.org/distributions/gradle-5.6.4-bin.zip,在浏览器中访问该链接,选择对应目录即可安装
方法二:
在浏览器中访问 https://gradle.org/releases/ 选择需要的版本点击下载,这里需要选择binary-only下载即可
3. gradle 安装
gradle安装比较简单,直接将下载的gradle-5.6.4-bin.zip 包,解压即可,建议解压到一个全英文目录
4. gradle环境配置
- 全渠环境变量配置(ps:因为是以前就安装好的gradle,所以大家可以忽略版本)
首先,点击此电脑->右击打开属性->选择环境变量
其次,在系统变量中新建增加GRADLE_HOME,变量值就是上面gradle解压目录
再次,在系统变量中配置GRADE_USER_HOME,这个变量值就是你的gradle本地仓库,这个类似与maven的本地仓库,后续第三方依赖会从远程仓库来下来保存到这个目录
最后,在Path目录中增加%GRADLE_HOME%\bin
- 可以做下验证,快捷键ctrl+R,输入cmd打开,执行gradle -v,如果能正常展示版本说明gradle安装完成
Spring源码编译
spring源码配置修改
这里需要修改一些spring源码中关于gradle的配置,否则,在源码编译过程中,你会遇到很多不可遇见的问题
- 修改gradle-wrapper.properties文件中的distributionUrl为你本地gradle安装目录,否则,构建源码时,他会自动去下载gradle
distributionUrl=file\:///d\:/workDir/work-kits/gradle-4.4.1/gradle-4.4.1-bin.zip
- 修改build.gradle文件中的repositories配置项,将外网的依赖仓库改成阿里云配置
//阿里云仓库全家桶 maven{ url 'https://maven.aliyun.com/repository/central'} maven{ url 'https://maven.aliyun.com/repository/public' } maven{ url 'https://maven.aliyun.com/repository/google'} maven{ url 'https://maven.aliyun.com/repository/gradle-plugin'} // gradle 相关插件仓库 maven{ url 'https://maven.aliyun.com/repository/spring'} maven{ url 'https://maven.aliyun.com/repository/spring-plugin'} maven{ url 'https://maven.aliyun.com/mvn/guide'} maven{ url 'https://maven.aliyun.com/repository/apache-snapshots'}
源码编译
方法一:
打开idea 将spring源码导入,打开后需要进行以下配置
- 打开project settings 配置JDK版本
- 打开settings,配置gradle
特别说明:建议将Build and run using和Run tests using修改成IDEA,不要使用gradle(Default),后续编译会快很多
- 使用build惊醒编译,这个时间比较长,期间如果发生异常中断,一般都是网络超时,直接点击刷新重试即可
方法二:
在spring源码目录中打开shell界面执行.\gradlew.bat进行编译
出现BUILD SUCCESSFUL代表编译成功,然后将spring源码导入idea,配置好Project settings和gradle即可
源码调试
- 创建一个gradle模块,模块名可以自定义,
- 在自定义模块的build.gradle配置文件中增加spring-context和spring-instrument的依赖
implementation project(":spring-context") implementation project(":spring-instrument")
这里说明一下,本来只需要导入spring-context依赖,但是只导入这一个依赖在启动时可能会发生以下异常,context中依赖的instrument依赖找不到,所以可以将两个依赖一起导入
- 创建测试Bean
- 创建启动类
- 执行启动类
如果能正常输出测试内容,说明调试成功
彩蛋
如何快速的阅读源码和定位核心方法
可以使用正常的Dubug+idea插件 Sequence Diagram
Sequence Diagram插件安装后可以在方法上直接右击打开SequenceDiagram 就可以看到方法的调用链路
可以在设置中调整方法进入深度和跳过一些无用方法