Spring 编译源码
Spring源码编译
1.本地开始Spring源码搭建
Spring 5.2.x Gradle 5.6.4
1.克隆源码下来
本地编译的是Spring5.2.x版本,spring5支持注解启动。 Spring从3.2开始由maven方式改成了gradle,所以我们需要提前配置git、 gradle环境变量, 因为要使用git clone源码。 强烈推荐构建5.1版本的源码,5.2不太容易编译。
当我执行git clone的时候 git clone https://github.com/spring-projects/spring-framework.git -b 5.2.x,访问github只有20KB每秒,可以用另外一种方式:在gitee码云上从github导入spring仓库,稍等几分钟就能导入好,然后从gitee上克隆这个就可以了. 可以看到网速的对比10KB,2MB。

git branch -r 查看有的分支
git checkout origin/5.2.x 当然也可以先clone源码仓,然后checkout出5.2.x分支,
git status第一行可以查看当前所处的分支。
2.导入项目到IDEA工程
先修改下配置文件访问国内镜像,这样下载依赖速度会快很多。build.gradle文件修改
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
settings.gradle文件修改
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
gradlePluginPortal()
maven { url 'https://repo.spring.io/plugins-release' }
}
IDEA中导入该工程,先配置使用本地gradle
| Gradle user home | Use gradle from |
|---|---|
| 指定下载依赖的存放位置 | 使用哪里的gradle |
![]() |

下载完成依赖,Build完成后,出现BUILD SUCCESSFUL.

3.构建源码
需要预先构建spring-core 和 spring-oxm两模块

两个模块分别编译成功。


现在编译整个工程


4.验证步骤
直接在Spring-context模块里测试下Spring编译的对不对,就翻车了。
Error:(350, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar

这个错误解决方式如下:将源码目录下的spring-core\kotlin-coroutines\build\libs\kotlin-coroutines-5.2.9.BUILD-SNAPSHOT.jar加入到spring.spring-core.main,然后重新重复上面编译整个工程,这次会出现checkstyle的错误,把刚才写的几个测试类删掉重新编译即可。


再次编译成功之后,测试Spring编译成功了。

问题一. CoroutinesRegistrar
这个错误出现的原因,5.2.x使用到了kotlin的CoroutinesUtils工具类,但是这个类没有编译进去,上面的方法将kotlin的包导入到模块里,但是后续又出现这样的问题了, 没接触过,比较之后发现5.1.x没有这个kotlin-coroutines,
果断重新编译5.1.x,就相当的顺利啦.
问题二. build出现checkstyle的错误
checkstyle的错误如果出现,想要屏蔽,可以注释掉 build.grade下面三个checkstyle地方:



5. 新建个模块来编写测试
上一步我们直接在spring-context里测试,尝试用gradle新建一个模块来阅读源码
新建一个gradle模块,随意取名spring-learning

引入 spring-context依赖,compile(project(":spring-context")) build之后编写测试类.

验证下:



浙公网安备 33010602011771号