Sring源码阅读-环境搭建,编译Spring源码
当进行Spring源码阅读时,首先需要进行环境搭建,包括安装和配置一些必要的工具和软件。
Spring源码阅读环境搭建
1. Git安装
-
下载Git Git (git-scm.com)
-
生成SSH key:为了避免每次远程访问都需要输密码,所以使用ssh登陆
-
ssh-keygen -t rsa -C "你的邮箱"
-
连按三次回车键
-
找到create directory中的 路径
-
现在已经生成ssh密钥,其中 id_rsa.pub 便是公钥
-
登录GitHub,找到Settings
- 在左侧导航条找到
SSH and GPG keys
点击New SSH key
-
将公钥内容粘贴进来
-
然后点击 Add SSH key就可以了
-
测试我们配置是否生效
-
输入
ssh -T ssh -T git@github.com
如果出现这种情况
GIT 验证问题解决 可以看下这个文章
- 出现下面的情况就代表成功
-
2. Clone 源码
我们本次就先拿 v6.0.12 做示范
- clone项目
- 在gitbase中输入
git clone --branch v6.0.12 git@github.com:spring-projects/spring-framework.git
常见问题:
fatal: The remote end hung up unexpectedly.00GiB | 9.54 MiB/s
fatal: early EOF
fatal: index-pack failed
以上是因为项目太大,可以参考下面文章,也可以直接在Github下载项目zip
这个样子就是克隆完成了
并把项目导入到IDEA
2. Gradle安装与配置
Gradle是Spring Framework的构建工具,用于构建和管理项目。您可以按照以下步骤安装和配置Gradle:
-
版本选择:
- 版本的对应关系非常重要!非常重要!非常重要!
- 在Gradle文件中找到
wrapper
文件夹 - 在
wrapper
文件中找到gradle-wrapper.properties
distributionUrl=https://services.gradle.org/distributions/gradle-8.3-bin.zip
可以看到对应的版本是8.3
-
下载Gradle:
- 通过Gradle官网下载:https://gradle.org/releases/
-
安装Gradle:
- 解压下载的Gradle按照到指定目录
-
配置Gradle环境变量:指向Gradle的安装目录
-
输入
gradle --version
出现下面的情况代表配置完成
-
-
在这里可以看到我并没有使用推荐的Gradle版本,主要原因在于本地已有懒得在去安装了,当然版本不对应也让我踩了许多的坑,还是推荐小伙伴使用对应的版本与进行源码的编译
-
整合idea
- 这样我们就完成了IDEA 与Gradle的整合
3. JDK安装与配置
Spring Framework是使用Java编写的,所以您需要安装Java Development Kit(JDK)来编译和运行源代码。以下是安装和配置JDK的步骤:
-
下载JDK
- 如何选择版本
- 在Clone下来的项目中找到.sdkmanrc文件
- 在Clone下来的项目中找到.sdkmanrc文件
- 如何选择版本
-
其他的比如配置环境变量等,就不展开说了,相信各位小伙伴都掌握了
5. IDEA中的配置
-
增加阿里云的配置
-
settings.gradle 中
-
maven { url "https://maven.aliyun.com/repository/public" }
-
-
-
build.gradle
-
maven { url "https://maven.aliyun.com/repository/public" }
-
-
buildSrc/build.gradle
-
在settings.gradle 中注释依赖
- 相应的jar包可能下载不到了,如果不注释掉的话可能会导致Gradle构建失败
- 相应的jar包可能下载不到了,如果不注释掉的话可能会导致Gradle构建失败
-
去掉checkstyle ,为了我们方便阅读源码,有需要的同学可以不去掉
- build.gradle
- build.gradle
-
增加Gradle home配置
- gradle.properties
- gradle.properties
-
下载依赖
- 点击下刷新然后耐心等待
- 点击下刷新然后耐心等待
让我们来新建一个自己的模块,创建一个Gradle项目
我们给项目添加一下其他模块的依赖
api(project(":spring-context"))
不同的Gradle 有不用引入写法
继续写一个main方法测试一下:
输出UserA 地址值,我们的环境也就搭建完毕了