前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >拥有一套属于自己的Spring源码环境

拥有一套属于自己的Spring源码环境

作者头像
chengcheng222e
发布2021-11-04 16:35:02
1.4K0
发布2021-11-04 16:35:02
举报
文章被收录于专栏:简栈文化

Spring是一个非常优秀的开源项目,而且基本是互联网的标配。随着这几年的源码阅读习惯,拥有一套自己的源码阅读笔记项目已经是水到渠成。今天就来在本地编译一份,以便于后面记录核心笔记用。

环境准备
1.准备好源代码
  • https://spring.io/projects/spring-framework
  • https://github.com/spring-projects/spring-framework
  • https://gitee.com/mirrors/Spring-Framework (推荐,毕竟速度快,而且每天会跟github同步一次)
  • https://gitee.com/vernon/Spring-Framework (为了自己可以提交代码,必须要fork一份)

为什么贴这些url地址,是因为提醒我们所有人,官网与github是我们最先关注的地方。

gradle.properties

代码语言:javascript
复制
version=5.3.5-SNAPSHOT
org.gradle.jvmargs=-Xmx1536M
org.gradle.caching=true
org.gradle.parallel=true
kotlin.stdlib.default.dependency=false

从上面可以看出来,我们现在用到是spring 5.3.5-SNAPSHOT版本。后面会遇到一些编译问题,避免大家踩坑,我直接说。这里依赖的JDK需要在JDK11。

2.JDK准备

下载JDK11的版本:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html

但是,但是,但是官网的实在是太慢了,所以我这里就直接改为openjdk11了。传送门:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/ 下载速度就看你家里的带宽了,我基本在3M+左右~

http://static.cyblogs.com/Jietu20210219-223632.jpg

没有对比就没有伤害啊。

http://static.cyblogs.com/Jietu20210219-223756.jpg

配置好项目中使用的JDK版本,这边因为诉求不一样,平时基本还是用的JDK8

3.Gradle安装

因为我这里是Mac系统,所以一般的软件我都会采用brew来实现,因为实在太方便了。一行命令搞定~

代码语言:javascript
复制
brew install gradle

下面是我安装的gradle信息,是最新的版本6.7。

代码语言:javascript
复制
➜  ~ gradle -v
------------------------------------------------------------
Gradle 6.7
------------------------------------------------------------
Build time:   2020-10-14 16:13:12 UTC
Revision:     312ba9e0f4f8a02d01854d1ed743b79ed996dfd3
Kotlin:       1.3.72
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM:          1.8.0_172 (Oracle Corporation 25.172-b11)
OS:           Mac OS X 10.15.7 x86_64
4.Intellij IDEA 2020

因为spring在代码中有对Kotlin有一些依赖(低版本的可能会出现依赖问题),建议搭建升级到比价新的版本。

http://static.cyblogs.com/Jietu20210219-224353@2x.jpg

构建源码

因为spring依赖与gradle,而且都是国外的网站,相对来说网速会非常的慢。这里也是采用更换镜像的方式来加速处理。

build.gradle

代码语言:javascript
复制
repositories {
 // 优先本地
 mavenLocal()
 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/snapshot" } // Reactor

 mavenCentral()
 maven { url "https://repo.spring.io/libs-spring-framework-build" }
}

settings.gradle

代码语言:javascript
复制
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/snapshot" }

 gradlePluginPortal()
 maven { url 'https://repo.spring.io/plugins-release' }
}

配置一下gradle的参数

http://static.cyblogs.com/Jietu20210219-224901.jpg

构建成功验证

找到ApplicationContext接口,显示它的一个类关系图。如果出现下图所示类图界面说明构建成功了!(构建过程就是找依赖对象的过程)

http://static.cyblogs.com/Jietu20210219-173001@2x.jpg

编译源码

查看官方import-into-idea.md文档,如下内容:

代码语言:javascript
复制
1.Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
2.Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
3.When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)
4.Code away
1.编译spring-oxm模块

先编译spring-oxm下的compileTestjava,点击右上角gradle打开编译视图,找到spring-oxm模块,然后在other下找到compileTestjava,双击即可!

http://static.cyblogs.com/Jietu20210219-225904.jpg

2.编译spring-core模块

利用同样的方式,编译spring-core模块,出现BUILD SUCCESSFUL代码成功。

http://static.cyblogs.com/Jietu20210219-230123.jpg

3.都编译完成且成功之后,开始编译整个工程

打开右侧Gradle插件 spring->build->build。编译时间,每个人电脑的性能不一样,所需时间也不一样。

http://static.cyblogs.com/Jietu20210219-231519.jpg

我这里基本上全部成功,但是在Task :spring-webflux:test模块有一个test跑失败。算是有一点小瑕疵,但不影响整个编译。

http://static.cyblogs.com/Jietu20210219-231701.jpg

源码测试

构建成功了,源码编译成功了,能否用还不知道,还要测试通过才说明源码可以用了。直接在spring-context里面创建我们的一个service,然后通过ApplicationContext去获取它,并执行它的一个方法。

http://static.cyblogs.com/Jietu20210220-090140.jpg

代码部分我已经push上去了:https://gitee.com/vernon/Spring-Framework,后续就可以自由自在的在上面标注以及验证了。

参考地址
  • https://blog.csdn.net/weixin_44730681/article/details/107390331
  • https://zhuanlan.zhihu.com/p/122732323

如果大家喜欢我的文章,可以关注个人订阅号。欢迎随时留言、交流。如果想加入微信群的话一起讨论的话,请加管理员微信号:chengcheng222e,他会拉你们进群。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 简栈文化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
    • 1.准备好源代码
      • 2.JDK准备
        • 3.Gradle安装
          • 4.Intellij IDEA 2020
          • 构建源码
          • 构建成功验证
          • 编译源码
            • 1.编译spring-oxm模块
              • 2.编译spring-core模块
                • 3.都编译完成且成功之后,开始编译整个工程
                • 源码测试
                • 参考地址
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档