spring学习-01编译spring5.0源码(亲测可用)

使用idea+gradle编译spring5.X源码@TOC

使用idea+gradle编译spring5.X源码

作为一个开发三年的技术小白,都没有编译一下spring源码,现在我尝试一下编译源码,并把编译过程中遇到的坑记录一下,希望能对很多像我一样的人起到参考作用

版本工具:spring5.0.x,gradle4,9,jdk1.8_131,IntelliJ IDEA 2018-2

  1. 下载gradle ,,可以去官网下载,gradle版本需要4.2以上,小编这里选择的是gradle4.9版本。

    gradle下载地址:https://services.gradle.org/distributions/;
    spring学习-01编译spring5.0源码(亲测可用)_第1张图片

gradle下载时候有三个包,gradle-src为gralde源码,gradle-bin为安装包,gradle-all为源码加安装包,我们这里只需下载安装文件即可。
2. 配置gradle
gradle下载后不需要安装,解压再本地磁盘后配置环境变量即可
spring学习-01编译spring5.0源码(亲测可用)_第2张图片
1),配置gradle环境变量 spring学习-01编译spring5.0源码(亲测可用)_第3张图片
新建GRADLE_HOME,path中增加%GRADLE_HOME%/bin;即可

配置完成以后win+r,输入cmd进入dos界面,键入命令gradle -v,若如下图正确输出版本信息即可
spring学习-01编译spring5.0源码(亲测可用)_第4张图片

2),配置gradle默认的本地仓库,gradle和maven类似,工作时也需要一个本地仓库,管理工程jar包,可做如下配置,新增GRADLE_USER_HOME,路径配置成需要的本地仓库路径即可。和maven一样
spring学习-01编译spring5.0源码(亲测可用)_第5张图片

  1. 下载spring5源码 ;(这里我们直接从全球最大的同性交友平台github上下载就可以了),进入github官网,直接搜索spring spring学习-01编译spring5.0源码(亲测可用)_第6张图片
    这里可能有很多同志上传的spring源码,这里我们直接找官方版本
    spring学习-01编译spring5.0源码(亲测可用)_第7张图片
    进去之后会看到一个master版本,我们,同时也包含很多spring的历史分支版本,这里我们直接选择5.0.x版本
    spring学习-01编译spring5.0源码(亲测可用)_第8张图片
    spring学习-01编译spring5.0源码(亲测可用)_第9张图片
    我们直接下载zip到本地磁盘即可,我们也可以直接在IDEA里面从github导入
    spring学习-01编译spring5.0源码(亲测可用)_第10张图片
    spring学习-01编译spring5.0源码(亲测可用)_第11张图片
    spring学习-01编译spring5.0源码(亲测可用)_第12张图片
    这个过程很漫长,我这里网速还行,只用了半个小时,导入之后我们打开,然后gardle开始构建 下载 时间也很长,耐心等待,最后下载完成以后,会弹出配置gradle的设置项
    spring学习-01编译spring5.0源码(亲测可用)_第13张图片
    spring学习-01编译spring5.0源码(亲测可用)_第14张图片
  2. spring5源码导入idea进行构建
  3. 首先我们打开源码下载的目录 有一个import-into-idea.md文件
    spring学习-01编译spring5.0源码(亲测可用)_第15张图片
    我们点开import-into-idea.md文件
    spring学习-01编译spring5.0源码(亲测可用)_第16张图片
    a,因为其他项目需要依赖spring-core和spring-oxm,所以我们导入后需要先编译这两个
    spring学习-01编译spring5.0源码(亲测可用)_第17张图片
    由于是第一次编译,所有编译时间可能需要几分钟,小编这里花了接近 3分钟,在这个过程当中,小编这里直接编译成功 如果遇到找不到类的错误
    原因是因为cglib和objenesis编译错误,从书上看,为了避免第三方class的冲突,Spring把最新的cglib和objenesis给重新打包了(repack),并没有在源码里提供这部分代码,而是直接将其放在 jar报当中,也就导致了我们拉取之后编译错误,所以我们要把缺失的jar补回来
    解决办法:
    1,缺失jar引入
    spring学习-01编译spring5.0源码(亲测可用)_第18张图片
    2,新增jar在gradle中生效,因为整个spring都在gradle环境中,所以要使jar生效就必须更改gradle配置文件:
    compile filetree(dir: ‘libs’,include : ‘*.jar’)
    spring学习-01编译spring5.0源码(亲测可用)_第19张图片
    编译成功后如图:
    spring学习-01编译spring5.0源码(亲测可用)_第20张图片
    接下来编译spring-oxm模块
    spring学习-01编译spring5.0源码(亲测可用)_第21张图片
    编译过程中会出现提示错误信息,我们忽略这个信息
    spring学习-01编译spring5.0源码(亲测可用)_第22张图片
    spring学习-01编译spring5.0源码(亲测可用)_第23张图片

执行完了后,接着编译spring-context,spring-bean
spring学习-01编译spring5.0源码(亲测可用)_第24张图片
spring学习-01编译spring5.0源码(亲测可用)_第25张图片
因为前面两个模块已经编译过了,所以这两个模块的编译很快,最后,就是aop了,我们知道springAop接住了aspectj的语法,所以我们也需要编译spring-aspectj模块,但是由于aspectj的语法javac不支持,所以我们需要对spring-aspectj单独指定编译器 具体解决办法如下:
1.官网下载aspectj的最新版本的jar包
spring学习-01编译spring5.0源码(亲测可用)_第26张图片
2.打开命令行,切换路径到下载好的aspectj jar包目录 并且使用 java -jar执行 ,安装aspectj
spring学习-01编译spring5.0源码(亲测可用)_第27张图片
spring学习-01编译spring5.0源码(亲测可用)_第28张图片
spring学习-01编译spring5.0源码(亲测可用)_第29张图片
3.安装完成以后,我们到idea当中区设置更改编译器为Ajc,如图:
设置Facets(1)
spring学习-01编译spring5.0源码(亲测可用)_第30张图片
设置Facets(2)spring学习-01编译spring5.0源码(亲测可用)_第31张图片
设置Facets(3)
spring学习-01编译spring5.0源码(亲测可用)_第32张图片
删除Facets(4)
spring学习-01编译spring5.0源码(亲测可用)_第33张图片
更改编译器
spring学习-01编译spring5.0源码(亲测可用)_第34张图片
spring学习-01编译spring5.0源码(亲测可用)_第35张图片
注意画中的箭头指示及内容,不要选错了,如果选错 可能会导致编译失败,确认好以后,开始编译,这个过程也有点长 耐心等待
spring学习-01编译spring5.0源码(亲测可用)_第36张图片
spring学习-01编译spring5.0源码(亲测可用)_第37张图片
到了这里,spring的源码基本编译完成,已经 够我们学习使用了,最后我们自己新建一个module进行测试,module可选gradle构建,也可以选择maven构建,这里,小编选择了maven构建,导入spring-context的依赖
spring学习-01编译spring5.0源码(亲测可用)_第38张图片
spring学习-01编译spring5.0源码(亲测可用)_第39张图片
spring学习-01编译spring5.0源码(亲测可用)_第40张图片
spring学习-01编译spring5.0源码(亲测可用)_第41张图片
参考博文:https://blog.csdn.net/baomw/article/details/83956300
到此,源码编译成功 ,以后我们学习源码也在此基础之上

你可能感兴趣的:(源码解析)