欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

零基础打造Spring源代码阅读实战环境(简单易懂指南)

最编程 2024-02-23 19:18:03
...

版本:5.2.19

前置条件:

  • JDK11
  • git
  • IDEA 仅保证对于此环境有效,jdk可以安装多版本,或者可以用其他版本尝试一下。 如果不纠结想快速搭建环境,可以按照步骤一步步来,没必要在搭建环境的环节上浪费时间。

本教程使用于 MacOs 和 Windows

教程中用到的相关文件自取:链接:pan.baidu.com/s/1BxiC1WPo… 提取码:dp5d

1. 拉取代码

因为GitHub现在速度较慢,所以直接选用码云上的代码,gitee.com/mirrors/Spr…,分支选择 5.2.x

可以用git clone,但因为我们也不需要切换分支和查看git记录,这里建议直接下载zip包,这样也方便我们搭建失败的话,解压直接重新开始就可以。也可以在文章开头的网盘中直接下载。

2. 修改配置文件

2.1 build.gradle

修改项目根目录下的 build.gradle 文件。可以直接用网盘中的文件替换,也可以按照下面步骤修改。

加上阿里云的镜像地址,将圈出来的修改为如下,加速我们拉取依赖。

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

2.2 gradle-wrapper.properties

修改 Spring-Framework-5.2.x\gradle\wrapper\gradle-wrapper.properties

文件如下

我们比较熟悉的构建工具是 Maven,我们需要在自己的开发电脑上安装 maven,然后在 IDEA 里面配置 maven 路径。

但 Spring 是使用 gradle 构建的,可能是因为 gradle 打包大型项目速度快很多,不重要。

但我们在最开始并没有说我们需要 gradle 环境。玄机就在这里,当我们用 IDEA 导入项目之后,项目会自动从我们配置的地址中去下载 gradle 压缩包,然后进行解压等操作,帮我们把 gradle 环境搭建好。配置文件中 distributionUrl 就是这个下载的地址,默认的地址 services.gradle.org/distributio… 我们可以去下载,但 IDEA 去下载可能会失败,所以我们把这个地址改成本地的,让他从我们本地下载,基本上就不会失败了,除非你路径写错了。

我的电脑路径是

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

windows 改成

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

mac 改成

file://////Users/ethan/program/gradle-5.6.4-bin.zip

3. 导入 IDEA

先随便打开一个项目,进设置看下 git 有没有配置

开始导入,点击 open 选择文件夹

进去后会先看到这个提示,证明gradle下载成功了

趁着项目编译的时候,我们把JDK配置改了

打开 Project Structure,修改为圈出的选项

还有gradle的配置

构建的时间会比较长,我们先等待这边转完就行

这时候我们会先看到一个git报错

这个是因为我们是下载的 zip 包,没有 git 文件,我们依次运行一下 git 命令就可以就可以

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

然后我们等待打包结束,能看到如下提示

还是提示git的问题,因为我们已经解决了,我们直接再构建依次看下

这时候我们能看到构建已经成功了

看着成功了,但其实还没有,我们继续往下看。

3. 创建自己的 module

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

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

然后我们刷新一下构建

等待构建完成,我们去写测试代码

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

4. 编写测试代码

名称随意

代码如下

package com.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext
				context = new AnnotationConfigApplicationContext();
		context.refresh();
	}

}

执行 Run 命令

首先出现 Kotlin: warnings found and -Werror specified 这个错误

这个是因为 kotlin 会把 warning 当做 error 来处理。这个其实是允许的,这时候我们修改 build.gradle 文件中的如下配置,把 allWarningsAsErrors = true注释掉。

重新构建下。然后继续运行刚刚的 main 方法。

可能会遇到如下错误(如果是别的错误,见文末)

其实是没有 class 文件,我们可以运行对应模块的 Test 方法,让其编译出 class 文件。

跑完会弹出一个提示,不用管,因为这个包下面其实是没有测试类的,我们的目的也是为了编译 class 文件,有没有测试类无所谓。

然后我们重新跑我们自己模块的 main 方法,这时候会出现这个提示。

解决思路和刚刚是一样的,因为这个类是 context 里的,那我们找一个 context 里面的测试包去跑

跑完提示是和刚刚一样的,我们再去执行 main 方法,发现已经可以正常运行了。

补充错误

当我们改完Kotlin: warnings found and -Werror specified 这个错误之后,可能运行 main 方法还会遇到另一个错误 :

程序包org.springfeamework.cglib.core.internal不存在

这时候我们去运行core里面的一个gradle插件方法

运行完就会遇到上面别的错误。一步步解决就行了

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

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