学习java已有3年之久,spring一直停留在应用阶段,两次面试阿里的经历让我深感学习spring源码的重要性,废话不多说,开搞!
1、环境:
jdk1.8+spring5+gradle4.7+eclipse4.6
如果要参考该教程,环境最好一样(eclipse除外),因为以前编译过spring3,由于环境问题折腾了好久
2、检测jdk版本java -version
由于此次编译的是spring5,jdk版本不能太低
2、下载spring源码
spring源码托管在github上:https://github.com/spring-projects/spring-framework(还没安装git的同学是时候学习一下了,不过此次编译可以不依赖git)
下载下来解压:
3、安装gradle(一款基于Groovy的构建工具,比maven更简洁)
传送门:https://gradle.org/releases/
选择4.7版本下载
设置环境变量:
新建用户变量GRADLE_HOME,值为gradle的安装目录,我的安装目录如下:
设置环境变量:
检测gradle是否安装成功:
出现上图说明安装成功
4、将spring工程转换成eclipse可识别的工程
进入spring的解压目录,执行下面命令:
gradle cleanidea eclipse
(网上普遍反应这个步骤会报错,反正我是一次通过,以前编译spring3的时候在这里的确折腾了很久)
此时直接导入eclipse spring-core工程会报错缺少jar包:spring-cglib-repack-x.x.x.jar、spring-objenesis-repack-x.x.jar
要在spring的解压目录下执行下面这两个命令:
gradle objenesisRepackJar
gradle cglibRepackJar
5.此时你可以把spring工程导入到eclipse了
先导入spring-jcl,不然spring-core会报错(这些工程之间的依赖关系自己去摸索吧)
6、解决spring-bean工程的代码报错
缺少groovy插件,
安装groovy插件:
在eclipse的 Help -> Install New Software 中,添加groovy的下载连接:
http://dist.springsource.org/snapshot/GRECLIPSE/e4.6/(这里最后的e4.6代表你eclipse的版本别搞错了,不然安装不成功别找我)
这个安装groovy插件话说有点坑,开了vpn速度也提不上去,哪位老铁有好的方法烦请告知一声哈
7、安装groovy插件后会报一个groovy编译版本的错误,spring5用的是2.5的编译版本,而我们下载的groovy默认是2.6版本,查看groovy编译版本方式:windows->perferences->groovy
我已经改好了,注意这里不要想当然的选下面的Switch to试图切换编译版本,本人亲测行不通,不过可以用下面的方式:
Help->Install New Software
找到安装的groovy的插件(我的已经删了卸载了2.6和2.4版本的了):
原本有2.4、2.5和2.6三个编译版本,我们把2.4和2.6的给卸载了(选中2.4和2.6点击下面的Uninstall按钮),然后重启eclipse
8、解决spring-oxm报错问题(缺少castor和jax)
在spring的解压目录下执行下面命令
1.gradle genCastor
2.gradle genJaxb
然后去spring-oxm/build/classes下面看看,如果已生成jar包则应该不会再报错(记得clean一下)
不过我这里有些奇怪,执行上面两条命令后竟然生成的是解压后的文件,如果你也一样的话,还要继续以下步骤:
在classes目录下分别执行下面两条命令(自己打jar包):
jar cvf jaxb.jar jaxb\org
jar cvf castor.jar castor\org
然后回到eclipse,右键spring-oxm->build Path:
在Libraries中把原本的castor和jaxb删除,然后再重新导入我们手动打的jar包
到此为止,spring5的源码导入算是成功了: