由于本人最近在读spring源码,所以从本章开始,我们一起来啃啃spring源码,一个是记录自己的阅读历程,一个是给读者能带来一些不同的体验,尽量通俗易懂。
这里也顺便说下我是怎么阅读源码的。为了不至于坚持不住,不至于陷到源码中,这里说一点源码阅读的技巧。
1、最好旁边有一本对应源码的书籍(最好是市面上畅销的),边看边比对源码,效率会高一些。
2、近一段时间,最好就关注这方面的内容,这样会事半功倍。
3、一定要下载源码,把源码导入到自己常用的IDE里面,并且能够编译通过。这点也非常重要,大家不要只看书上的源码(因为不能总览源码目录结构),或者说直接看从工程里面依赖的jar包,然后下载对应的源码(这种方式有个缺点,不能编辑源码,我只能说即使不修改源码,但是在源码里面加一些注释,在摸不清头脑的地方,加一些System.out ,非常有利于阅读源码)。
好了,开始进入本章的正题。
特别说明一下,我下载的版本是5.1.3,后续的系列都以5.1.3版本为准。
这个很简单,在github上,直接搜索spring找到,官方的源码,下载即可,我这里给出网址,方便大家直接打开下载:链接: link.
注意:版本没必要下载最新的,但也不要太旧,建议5.1以上,也可以下载书中对应的版本号,这样不至于在参考书的时候,有一些不太一样的地方。
通过官方下载,网速快的话,大概半小时就能搞定。
如果大家的网络不给力,可以在gitee上边下载别人克隆下来的。这里也同样给出我找到的一个链接:link。
根目录打开build.gradle,找到repositories,增加如图 一行代码(maven { url “http://maven.aliyun.com/nexus/content/groups/public” })即可:
这样,从阿里云的私服下载,编译会快很多。
这里一定要注意的是:
java版本
一定要使用1.8.0_100以上的版本,我最开始用的1.8.0_05,编译直接报错,下载了最新的281版本,编译就可以了。
到这块,其实就可以直接编译了,有的网上还要求下载gradle,其实不需要下载gradle,在执行命令的时候,会自动下载,这里最好用自动下载的版本。后边会说为什么。
到这一步就可以开始源码编译了。
windows打开dos命令,mac打开terminal,cd命令进入spring源码根目录,
这里注意:
windows直接gradlew :spring-oxm:compileTestJava
mac不太一样,应该./gradlew :spring-oxm:compileTestJava,如果直接写gradlew会提示命令找不到。
正常情况下,出现以下截图说明编译成功!
很多资料上都给的是要编译spring-oxm,而不是编译其他的项目,都没有说明为什么要编译这个项目,其实原因很简单,首先spring-oxm也没什么特殊的,只是因为spring-oxm依赖了对应的项目,编译spring-oxm相当于编译了所有的项目而已。
编译的常见问题解决:
一、编译会出现:
Circular dependency between the following tasks:
:spring-beans:compileGroovy
— :spring-beans:compileJava
— :spring-beans:compileKotlin
— :spring-beans:compileGroovy (*)
我编译就报这个错误,网上搜的答案,没有一个是能解决的,我这里把自己的解决方式和网上的统一搜集下来了。
解决方案:
1、gradle版本问题(我自己就是这个问题导致)
这里注意,不是本地安装的gradle版本,是进入到spring源码根目录gradlew -v的版本。
我5.1.3对应的版本为4.10.2:
所以这里注意了,在执行./gradlew 命令时,是否会自动下载gradle包,如果没有,那说明用的是本地的安装包,那有可能就会报上边的错误。
当然大家只要按照正常步骤操作,基本上不会出现错误。
2、Spring-beans.gradle 更换如下:
将最后三句:
compileGroovy.dependsOn = compileGroovy.taskDependencies.values - “compileJava”
compileKotlin.dependsOn(compileGroovy)
compileKotlin.classpath += files(compileGroovy.destinationDir)
更换为:
def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
compileGroovy.dependsOn = deps - “compileJava”
compileKotlin.dependsOn(compileGroovy)
compileKotlin.classpath += files(compileGroovy.destinationDir)
这个是网上搜的答案,我觉得没啥用。。
这里其实没有什么过多说的,只要不是初学者,应该都会导入,不会的,我建议先不要学spring源码。
由于spring项目用到了kotlin,所以此时还需要安装kotlin。
目前kotlin最新的版本是1.3。
安装很简单,plugin直接搜索kotlin直接安装即可。如下图:
安装好后,需要配置下版本。
首先查看根目录的build.gradle
如果此时kotlin版本是1.2,则需要修改版本,
1、首先创建maven工程,创建好后,修改pom文件
等待依赖下载完成。
2、修改源码路径
打开File -> Project Structure…(我是mac本,可能路径有点不太一样)
点击Libraries
按照以上步骤操作。
有什么用?
这样我们就可以在自己的工程中调试源码拉。还有一个用处是,如果你在spring源码中加了注释,在你的工程中调试源码的过程中,看到的也是有注释的源码哦。
over。。有什么问题,大家随时call。