spring 5.0.21.BUILD-SNAPSHOT源码解读,第一集
工作了也有五六年了,一直从事java开发的工作,很多时候都是为了适配需求而开发代码,并没有对更深层去了解源码,最近无意间跟了下spring 5.0的源码,发现了彩蛋,激起了我的好奇,这才有了今天的这篇文章(后续我尽量更新)。
好了,进入正如:
1.准备环境:
- 操作系统:Ubuntu 20.04.1 LTS
- JDK :1.8.0_181
- GRADLE版本: Gradle 4.4.1
- MAVEN 版本: Apache Maven 3.5.4
- IDEA 版本: 2018.3.6
2源码下载:
-
spring源码(mirrors-Spring-Framework-5.0.1): https://github.com/spring-projects/spring-framework/tree/5.0.x 选择dist版本下载即可。
3.下载maven(3.5.4) :https://archive.apache.org/dist/maven/maven-3/3.5.4/source/
4.gradle下载:
注意下载gradle之前先要确认spring源码中默认使用的是哪个版本,在spring源码下build.gradle文件中查看配置的gradle版本,然后我们本地去安装这个版本,比如我下载的源码是 spring5.0.1,源码中配置的默认gradle版本是:
gradleVersion = "4.4.1",那么我就去安装4.4.1的版本,具体下载地址如下: https://services.gradle.org/distributions/
5.编译前准备:
maven 与 gradle 安装完成后,命令行检查是否正确,如图:
6.源码预编译:
打开spring源码的import-into-idea.md文件,执行第一步,./gradle :spring-oxm:compileTestJava (注意此处不要使用spring默认配置的gradlew命令)使用我们本地安装的gradle进行编译,如下图:
一定要先命令进入到spring源码目录:
这一步很多人都会卡很久,也包括我,要么是jdk版本不匹配,要么是gradle版本不匹配,要么是maven网络被墙,总之各种各样的问题,我大概说下解决方案:
如果是版本问题,建议最好更换版本(这就是我开头就放出了我的环境版本的原因),如果是网络被墙或者缓慢,可以在build.gradle中增加阿里仓库地址配置如下:
buildscript { 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/plugins-release'}//原来的仓库地址一定要保存,切记切记。 } }
7.导入IDEA
这一步就简单了,idea直接导入选择gradle编译,指定本地安装版本,会自动下载依赖,这里会要很久很久,我用了25分钟。
最终结果如下:
自己可以新建一个moudle,选择gradle类型,然后增加spring-context依赖,就可以愉快的调试代码了。
添加依赖:
执行效果,下一期开始调试:
如果idea中下载速度太慢,可以设置gradel的仓库地址为阿里云即可,具体如下:
1.在init.gradle 目录下新建文件init.gradle,文件内容如下:
allprojects{ repositories { def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." remove repo } } } maven { url REPOSITORY_URL } } }