Spring 5.1源码编译

版本工具:IntelliJ IDEA 2018-3,gradle4.9,jdk1.8.0_181,spring5.1.x, kotlin1.2.41,groovy2.4.12,

编译spring源码的方式有很多方式,小编知道的就有两种,一种是gradle编译,一种是借助编辑工具编译,比如说eclipse和IDEA,这里就拿IDEA举例说明。

gradle 和 jdk的安装这里就不再复述,度娘查一下很easy,基本操作,下面直接开始源码编译。

  1. 导入之前,我们先看源码根目录中的import-into-idea.md文件

Spring 5.1源码编译_第1张图片

注意几点:

  1. 因为其他项目需要依赖spring-core和spring-oxm,所以我们导入后需要先编译这两个包
  2. spring-aspects需要依赖三方jar,所以这里编译可能会报错,但是不影响我们编译使用,让我们忽略这个错误
  3. 使用工具编译时,我们需要调整写参数避免出现内存溢出导致编译不通过    -XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m
  4. 在IDE中编译spring的源码,必须要先生成spring-oxm模块的资源
  1. 将源码导入到IDEA(将源码导入IDEA有两种方式), 源码地址:https://github.com/spring-projects/spring-framework.git
    1. 将源码下载到本地,解压之后导入到IDEA中
    2. 使用IDEA的git插件,直接从github上将代码导入到项目中
  2. 首先我们打开IDEA,选择地下的check pout from version control,选择git方式Spring 5.1源码编译_第2张图片
  3. 输入源码地址和本地的目录,然后等待源码下载完成Spring 5.1源码编译_第3张图片
  4. 选择使用gradle方式导入Spring 5.1源码编译_第4张图片
  5. 注意截图部分中的配置项,选择自己本地安装的gradle,jdk的版本要1.8以上,对应的虚拟机参数调整Spring 5.1源码编译_第5张图片
  6. 点击Finish,等到IDEA导入成功之后,我们切换下代码的版本,当前down下来的最新的是master版本,这里我们要编译的是5.1x版本,切换到版本5.1x后,IDEA会自动构建Spring 5.1源码编译_第6张图片
  7. 项目在构建项目的时候可能会出现以下错误
    1. No such property: immutableValues for class: org.gradle.api.internal.tasks.DefaultTaskDependency,图截图所示错误Spring 5.1源码编译_第7张图片解决办法:注释模块spring-bean中的spring-bean.gradle文件中的截图部分代码Spring 5.1源码编译_第8张图片
    2. Could not find method useJUnitPlatform() for arguments ,错误如图所示Spring 5.1源码编译_第9张图片解决办法:注释掉模块spring-test中的spring-test.gradle文件中的截图部分代码Spring 5.1源码编译_第10张图片
    3. 小编在build两次之后,只出现了以上两处错误
  8. 下面开始编译spring-core的代码Spring 5.1源码编译_第11张图片
  9. 以同样的方式分别去编译sping-bean spring-context spring-oxm模块
    1. run test的时候,可能会出现以下错误。Spring 5.1源码编译_第12张图片产生问题的原因:sping-core会依赖两个核心的jar   Spring 5.1源码编译_第13张图片 解决方法:cmd窗口进入到sprng-core目录,执行命令gradle build,直到出现BUILD SUCCESSFUL,如图所示:Spring 5.1源码编译_第14张图片
    2. 出现这个异常Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 解决方法:在cmd窗口查看自己kotlin的版本Spring 5.1源码编译_第15张图片
    3. 修改工程根目录下的build.gradle文件中的对应kotlin版本号(编译通过后,小编无意还原了github上的代码,kotlin的版本回滚到了1.2.71,发现并不会影响到源码的编译,这个可以忽略,但是也可以作为一个参考点)Spring 5.1源码编译_第16张图片
    4. 以及IDEA编辑器中的kotlin版本Spring 5.1源码编译_第17张图片
    5. 重新run test。 在run test其他模块的过程中,可能会出现,有些错误是可以忽略的,在你无法鉴定这个错误是不是可以忽略的时候,你就直接执行下面的步骤,新增module来测试代码能不能运行,debug能不能调试到spring源码中去,这里好像没有一个绝对的标准
  10. 新增Module来测试源码编译是否通过
    1. 右键spring工程,新增一个moduleSpring 5.1源码编译_第18张图片
    2. 选择gradle Module,下一步Spring 5.1源码编译_第19张图片
    3. 输入模块名称,下一步,然后finish,新增module成功Spring 5.1源码编译_第20张图片
    4. 维护新增module对spring-context的依赖关系Spring 5.1源码编译_第21张图片
    5. 编写测试代码Spring 5.1源码编译_第22张图片Spring 5.1源码编译_第23张图片
    6. 右键run Test.Main,查看输出结果Spring 5.1源码编译_第24张图片
  11. 至此,sping源码在IDEA中编译完成,大功告成。

 

 

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