spring源码编译完整步骤拿来即用!
阅读原文时间:2022年04月04日阅读:1

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中,从本地拉取速度会相当快,也可以提交自己测试代码用于总结学习

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器