newMoreObject

spring源码编译完整步骤拿来即用!

1.版本选择

(1)源码版本:

​ spring5.3.x

(2)gradle版本:

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

img

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

(3)JDK版本:

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

img

(4)IDEA版本:

​ 尽量选择较高版本:我用的是2021.3.2版本

2.环境准备

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

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

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

img

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

img

(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()
}

  

img

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

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

img

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

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

3.spring源码导入ieda

(1)直接选择open打开工程

img

(2)IDEA中配置gradle和JDK

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

img

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

 file->project Structure->project

img

  file->settings->gradle

img

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

4.构建spring源码

(1)build(构建)

​ 上一步配置完idea中的gradle后,点击确认会自动开始构建,当所有模块build完成后,提示finished表示成功

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

img

(2)编译spring-oxm模块

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

img

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

img

(3)build整个项目

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

img

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

img

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

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

img

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

img

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

5.新建模块用于测试

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

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

img

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

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

img

解决办法:

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

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

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

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

img

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

img

posted on   newMoreObject  阅读(2606)  评论(4编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示