spring源码编译完整步骤拿来即用!
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中配置gradle和JDK
注意:此时idea会为源码项目创建工作空间,等待创建完成后会立即开始构建项目,我们不要着急构建项目,还需要在IDEA中为spring源码项目配置gradle和JDK,点击停止按钮打断构建,如下所示
配置如下图:先配置图一再配置图二,
file->project Structure->project
file->settings->gradle
点击确认后,项目就会开始自动build,此时无需其他操作。
4.构建spring源码
(1)build(构建)
上一步配置完idea中的gradle后,点击确认会自动开始构建,当所有模块build完成后,提示finished表示成功
如下的报错信息可以忽略,这个是与git相关的报错信息,不影响spring源码编译
(2)编译spring-oxm模块
为确保所有模块都构建成功,这里可以参考官方spring源码工程中的 import-into-idea.md文档描述:先编译spring-oxm模块
在gradle中使用spring-oxm的 compileTestJava选项编译此模块(双击运行即可),具体位置如图
(3)build整个项目
此时再选择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导入仓库
step3:将url填写到如下位置,点击导入即可将源码项目复制到自己的gitee中,从本地拉取速度会相当快,也可以提交自己测试代码用于总结学习
posted on 2022-04-03 20:38 newMoreObject 阅读(2606) 评论(4) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构