前言:使用Idea编译Spring Framework5.1源码
Spring Framework源码,可谓是教科书,是每个Java程序员都应该要学习的。你是否也想学习Spring Framework源码,想从中了解Srping的原理,但你将Spring Framework源码下载下来后,一编译就会出现各种各样的错误。然后,就开始百度找各种各样的资料,各种资料翻来覆去,但可能只解决了你部分问题,后面还有更多的坑等着你去踩。其实我也是这样过来的。但是现在,我把我编译过Spring Framework的源码过程告诉大家,让大家尽量的避免踩坑。
首先准备编译源码所需要的工具:
IntelliJ IDEA 2020.1.1、JDK1.8、Gradle 6.7.1
1.第一步去Github下载Spring Framework源代码
源码地址: https://github.com/spring-projects/spring-framework
选择5.1版本的然后下载
选择git或者zip包下载,建议zip包下载方式
下载好之后就是一个压缩包
用zip包下载的好处就是,如果一份源码弄坏了,就可以马上解压一份新的重新编译,就不用去github下载了。
2.第二步去Gradle官网下载Gradle 6.7.1
地址:https://gradle.org/install/
点击Binary-only下载gradle,只需下载二进制包就可以了,不需要下载完整的包。
下载完成后解压,只有三个目录,然后配置系统环境变量,方便在cmd控制台输入gradle命令进行下载jar包
配置系统环境变量,新建变量名:GRADLE_HOME,变量值就是解压了gradle的文件目录,点击确定。在path变量后面追加%GRADLE_HOME%\bin;即可。打开cmd控制台输入gradle -v
出现版本号说明配置成功了!
3.第三步编译Spring Framework源码,把源码文件拖入idea编辑器
这是没有编译过的,打开设置,设置gradle
设置gradle下载的jar包本地仓库,新建repository文件夹,一般放在gradle解压后的目录下面
设置好了以后,就可以编译了。打开build.gradle文件,这里有几处错误,我们都不用理会不影响我们编译源码。
再设置kotlin编译版本,打开设置查看我们当前的kotlin版本号。当前我的版本号为1.3.72,如果不是最新的可以更新到最新的版本。
我们找到build.gradle文件两处kotlin版本号的地方,修改成自己idea当前的版本,然后就下一步了。
build.gradle文件里面这几处错误都不影响我们继续编译源码,然后我们可以设置阿里云gradle镜像加速。
buildscript {
repositories {
maven { url "https://maven.aliyun.com/repository/public/" }
maven { url "https://maven.aliyun.com/repository/spring/" }
maven { url "https://repo.spring.io/plugins-release" }
mavenLocal()
mavenCentral()
}
dependencies {
classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE")
classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
}
}
阿里云镜像加速地址:https://maven.aliyun.com/mvn/guide
设置好之后,点击编辑。之后就是等idea拉取jar包了。
这里可能要等半个小时或者1个小时左右,网络好的话可能就会很快。慢慢等吧!
等待idea下载完spring依赖的jar包,我们首先运行spring-core这个模块的test类。
右键运行会报错,报错信息说明了,缺少spring-cglib-repack-3.2.11.jar和spring-objenesis-repack-3.0.1.jar这两个jar包。
我们可以通过gradle命令来下载这两个jar包,在spring源码目录右键打开cmd控制台。(注意:要在spring-framework源码目录打开)。
我们运行两条命令下载需要的jar包
gradle cglibRepackJar
gradle objenesisRepackJar
执行完命令,所需的jar包已经下载成功了,可以继续运行spring-core这个模块的test类了。
运行完test,有一处错误不影响我们,继续下一步。
我们继续编译spring-oxm这个模块,也是直接选择test目录 run test
编译spring-oxm模块也会出现错误,这个错误并不是缺少类。在jibx这个包下有这两个类,但是缺少一些方法。
我们可以用gradle下载jar包解决这个错误。也是在spring-framework源码目录打开cmd控制台,把这两个命令执行一下就可以了。
gradle genCastor
gradle genJaxb
执行完命令,解决完报错问题,然后继续编译spring-oxm这个模块。右键test模块直接 run test
编译过程可能还会出现错误,我们去spring-context这个模块,修改一下spring-context.gradle这个文件。修改dependencies模块下的optional(project(":spring-instrument")),修改为compile(project(":spring-instrument")),然后刷新下就可以继续编译spring-oxm模块了。
到此为止spring源码已经编译好了,这里也会出现20几处错误。我们也不用理会,到现在我们就可以往spring源码添加我们自己的模块了。
我们选中spring-framework2右键。选择新建module,然后选择gradle,下一步填好项目名称直接下一步,项目就会构建好了。
导入spring-context模块,然后编写些测试类,最后测试。在控制台打印出test,恭喜你!spring源码终于编译成功了。