1.版本选择

1)源码版本:spring5.3.x

2)gradle版本:根据spring源码的工程路径:gradle/wrapper/gradle-wrapper.properties文件查看gradle版本。如图所示:

可以看到源码版本对应gradle版本为,所以可依此下载gradle-7.2版本,注意这里请保留gradle-7.2的zip压缩包,后面会用到

3)JDK版本:可以根据如下路径中的ide.gradle选择JDK版本,这里是JDK1.8

4)IDEA版本:尽量选择较高版本:我用的是2021.3.2版本

2.环境准备

1)gradle安装并配置环境变量,此步骤可自行百度

2)ieda配置gradle的存储jar包仓库,如图所示:

进入idea的全局设置,可以先打开一个工程,然后再file选项下选择close project 关闭工程可回到此界面

在这里配置gradle仓库路径,用来存储gradle编译spring源码时下载的各种jar包

3)spring源码工程构建前相关文件修改配置

  1.maven仓库下载路径修改:因为github下载的源码中maven仓库路径是国外地址,此处可更改为阿里云仓库,gradle编译时下载jar包速度会极大提升

  文件路径: spring-framework/build.gradle

  在build.gradle文件中找到repositories 代码块,配置如下路径,或者可以自行登录 【阿里云maven仓库地址:https://developer.aliyun.com/mvn/guide】选择url路径配置

repositories {
maven { url "https://maven.aliyun.com/repository/public" }
maven { url "https://maven.aliyun.com/repository/apache-snapshots" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://repo.springsource.org/plugins-release" }//国外路径
maven { url "https://repo.spring.io/libs-spring-framework-build" }//原始路径
mavenCentral()
}

  

  2.gradle/wrapper/gradle-wrapper.properties文件修改

  默认文件配置如图所示,当我们将项目导入idea时会根据标红地址下载gradle-7.2-bin.zip压缩包,由于前面我们自行下载并配置了gradle,不需要重新下载

修改为如下路径:即存放 gradle-7.2-bin.zip文件的路径

distributionUrl=file\:///D:/Java/gradle-7.2/gradle-7.2-bin.zip

3.spring源码导入ieda

1)直接选择open打开工程

2)此时idea会为源码项目创建工作空间,等待创建完成后会立即开始构建项目,我们不要着急构建项目,还需要在IDEA中为spring源码项目配置gradle和JDK,点击停止按钮打断构建,如下所示

3)给项目配置gradle和jdk

  配置如下图:先配置图一再配置图二,

  file->project Structure->project

  file->settings->gradle

  点击确认后,项目就会开始自动build,此时无需其他操作。

4.开始构建

  1)当所有模块build完成后,提示finished表示成功

  如下的报错信息可以忽略,这个是与git相关的报错信息,不影响spring源码编译

  2)为确保所有模块都构建成功,这里可以参考官方spring源码工程中的 import-into-idea.md文档描述:先编译spring-oxm模块

在gradle中使用spring-oxm的 compileTestJava选项编译此模块(双击运行即可),具体位置如图

  3)此时再选择spring下的build选项编译整个源码项目

4)编译过程中出现spring-web模块编译失败。如下

注意报错的类和报错行:Jackson2JsonEncoderTests.java 的253行,找到这个类,将253行注释掉,如下:

为什么要注释掉:随意测试出来的,看过这个 jacksonValueUnwrappedBeforeObjectMapperSelection()方法的提交记录 是由spring团队2022.3.16提交的,注释掉不知道是否会影响spring-web模块的引用。

5)重新build ,即重复 3)步骤,编译成功

至此,spring源码编译就成功了

5.新建模块用于测试

此步骤省略不写,主要记录几个踩过的坑

1.gradle7版本和gradle5版本之间用重大升级更新 旧版本的compile关键字在新版本中已经弃用 ,换为 implementation关键字,引用项目时需要注意

2.新建模块并且已经引入了其他模块,编码测试时发现引入项目没生效

此时应该要检查自己gradle编译工具的新建模块下的runtimeClasspath下有没有自己引入的模块,没有就说明引用没成功

解决办法:

先将新建模块下的测试代码(引用其他项目中类的代码)注释掉,再重新build整个spring项目,就可以引用成功了

6.spring源码项目的拉取的技巧分享

step1:先登录自己的github账号,将spring-framework 项目fork到自己的github仓库,复制fork到自己的spring源码仓库的url

step2:登录自己的gitee的账号,选择从github导入仓库

将url填写到如下位置,点击导入即可将源码项目复制到自己的gitee中,从本地拉取速度会相当快,也可以提交自己测试代码用于总结学习

最新文章

  1. 深入探索RB-tree数据结构
  2. patchca验证码的使用
  3. git和SVN交互(待完善)
  4. CentOS搭建socket5代理服务器
  5. Android课程---Activity的跳转与传值(转自网上)
  6. python模块介绍- SocketServer 网络服务框架
  7. django - raw sql - 注意点!
  8. ch03-文字版面的设计
  9. Java基础知识强化之集合框架笔记49:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台
  10. 当setTimeout遇到闭包
  11. 关于C#继承运用的总结
  12. [读书笔记]telnet与http服务器一次直接对话
  13. Windows下切分文件(GnuWin32)
  14. 利用JDBC工具类 模拟用户登录!
  15. 基于kettle的简单HTTP接口监控
  16. vue el-upload form 同时提交
  17. Linux内核调试:kdump、vmcore、crash、kernel-debuginfo【转】
  18. sublime text3 golang插件(golang build)
  19. C# DataTable分页函数
  20. leetcode 题解: Gray Code

热门文章

  1. laravel 5.6 API 接口开发限制接口访问频率
  2. JS类型判断&原型链
  3. S5700上三层Vlan间隔离的例子
  4. RENIX板卡V2-100G系列工作模式速率切换——网络测试仪实操
  5. LGP6011题解
  6. Java实例变量、局部变量、静态变量
  7. ArcMap线上均匀生成点
  8. 53端口反弹shell
  9. minouche
  10. Linux下mysql的彻底卸载