版本:5.2.19 前置条件:

  • JDK11
  • git
  • IDEA

仅保证对于此环境有效,jdk可以安装多版本,或者可以用其他版本尝试一下。 如果不纠结想快速搭建环境,可以按照步骤一步步来,没必要在搭建环境的环节上浪费时间。 本教程使用于 MacOs 和 Windows 教程中用到的相关文件自取:链接:https://pan.baidu.com/s/1BxiC1WPoyk47C6_bSC3CHQ 提取码:dp5d

1. 拉取代码

因为GitHub现在速度较慢,所以直接选用码云上的代码,https://gitee.com/mirrors/Spring-Framework,分支选择 5.2.x
image.png
可以用git clone,但因为我们也不需要切换分支和查看git记录,这里建议直接下载zip包,这样也方便我们搭建失败的话,解压直接重新开始就可以。也可以在文章开头的网盘中直接下载。
image.png

2. 修改配置文件

2.1 build.gradle

修改项目根目录下的 build.gradle 文件。可以直接用网盘中的文件替换,也可以按照下面步骤修改。
image.png
加上阿里云的镜像地址,将圈出来的修改为如下,加速我们拉取依赖。
image.png

  1. repositories {
  2. maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
  3. maven { url "https://maven.aliyun.com/nexus/content/repositories/jcenter"}
  4. maven { url "https://repo.spring.io/libs-spring-framework-build" }
  5. maven { url "https://repo.spring.io/snapshot" } // Reactor
  6. maven { url "https://oss.jfrog.org/artifactory/oss-snapshot-local" } // RSocket
  7. }

2.2 gradle-wrapper.properties

修改 Spring-Framework-5.2.x\gradle\wrapper\gradle-wrapper.properties
image.png
文件如下
image.png
我们比较熟悉的构建工具是 Maven,我们需要在自己的开发电脑上安装 maven,然后在 IDEA 里面配置 maven 路径。
但 Spring 是使用 gradle 构建的,可能是因为 gradle 打包大型项目速度快很多,不重要。
但我们在最开始并没有说我们需要 gradle 环境。玄机就在这里,当我们用 IDEA 导入项目之后,项目会自动从我们配置的地址中去下载 gradle 压缩包,然后进行解压等操作,帮我们把 gradle 环境搭建好。配置文件中 distributionUrl 就是这个下载的地址,默认的地址 https://services.gradle.org/distributions/gradle-5.6.4-bin.zip 我们可以去下载,但 IDEA 去下载可能会失败,所以我们把这个地址改成本地的,让他从我们本地下载,基本上就不会失败了,除非你路径写错了。
我的电脑路径是

  1. C:\dev\gradle-5.6.4-bin.zip

windows 改成

  1. file\:///c\:/dev/gradle-5.6.4-bin.zip

mac 改成
// todo 测试后再上传
image.png

3. 导入 IDEA

先随便打开一个项目,进设置看下 git 有没有配置
image.png
开始导入,点击 open 选择文件夹
image.png
image.png
进去后会先看到这个提示,证明gradle下载成功了
image.png
趁着项目编译的时候,我们把JDK配置改了
打开 Project Structure,修改为圈出的选项
image.png
image.pngimage.png
还有gradle的配置
image.png
构建的时间会比较长,我们先等待这边转完就行
image.png
这时候我们会先看到一个git报错
image.png
这个是因为我们是下载的 zip 包,没有 git 文件,我们依次运行一下 git 命令就可以就可以

  1. git init
  1. git add --all
  1. git commit -m 'first commit'

然后我们等待打包结束,能看到如下提示
image.png
还是提示git的问题,因为我们已经解决了,我们直接再构建依次看下
image.png
这时候我们能看到构建已经成功了
image.png
看着成功了,但其实还没有,我们继续往下看。

3. 创建自己的 module

image.png
image.png
image.png
image.png
注释掉原有的依赖,加上 spring-context 依赖,我们去测试一下

  1. optional(project(":spring-context"))

然后我们刷新一下构建
image.png
等待构建完成,我们去写测试代码

注意,如果有别的错误,见文末

4. 编写测试代码

名称随意
image.png
image.png
代码如下

  1. package com.spring;
  2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  3. public class Test {
  4. public static void main(String[] args) {
  5. AnnotationConfigApplicationContext
  6. context = new AnnotationConfigApplicationContext();
  7. context.refresh();
  8. }
  9. }

执行 Run 命令
image.png
首先出现 Kotlin: warnings found and -Werror specified 这个错误
image.png
这个是因为 kotlin 会把 warning 当做 error 来处理。这个其实是允许的,这时候我们修改 build.gradle 文件中的如下配置,把 allWarningsAsErrors = true注释掉。
image.png
重新构建下。然后继续运行刚刚的 main 方法。
可能会遇到如下错误(如果是别的错误,见文末)
image.png
其实是没有 class 文件,我们可以运行对应模块的 Test 方法,让其编译出 class 文件。
image.png
跑完会弹出一个提示,不用管,因为这个包下面其实是没有测试类的,我们的目的也是为了编译 class 文件,有没有测试类无所谓。
然后我们重新跑我们自己模块的 main 方法,这时候会出现这个提示。
image.png
解决思路和刚刚是一样的,因为这个类是 context 里的,那我们找一个 context 里面的测试包去跑
image.png
跑完提示是和刚刚一样的,我们再去执行 main 方法,发现已经可以正常运行了。

补充错误

当我们改完Kotlin: warnings found and -Werror specified 这个错误之后,可能运行 main 方法还会遇到另一个错误 :
程序包org.springfeamework.cglib.core.internal不存在
这时候我们去运行core里面的一个gradle插件方法
image.png
运行完就会遇到上面别的错误。一步步解决就行了

可以开始愉快的学习 Spring 源码,通过修改源码验证我们的各种猜想。

教程来源于子路老师的课程