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会为源码项目创建工作空间,等待创建完成后会立即开始构建项目,我们不要着急构建项目,还需要在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中,从本地拉取速度会相当快,也可以提交自己测试代码用于总结学习

spring源码编译完整步骤拿来即用!的更多相关文章
- Spring源码编译一次性通过&遇到的坑解决方法
前言 spring源码本地编译,按网上的博客参考资料的操作步骤,总是会出现各种莫名其妙的错误.根据错误信息找解决方案,但在自己的环境下又总是编译不过去.结合参加培训学习Jack老师提供的方法,自己多种 ...
- 【转】Spring源码编译
原文地址: http://www.flyoung.me/2013/08/02/springcodecompile/ 参考资料: https://github.com/spring-projects/s ...
- 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译
源码学习第一步,Spring源码编译 之所以写这么一篇文章是因为群里的小伙伴在编译源码时碰到了问题,再加上笔者自身正准备做一个源码的注释版本,恰好也需要重新编译一份代码,至于为什么要将源码编译到本地就 ...
- 1.编译spring源码
本文是作者原创,版权归作者所有.若要转载,请注明出处 下载spring源码,本文用的是版本如下: springframework 5.1.x, IDE工具idea 2019.2.3 JAVA ...
- Gradle编译Spring源码
使用工具:JDK1.8.0_11.Gradle4.9.idea2018.1.3 1. 配置Gradle Gradle下载地址:https://gradle.org/releases/ 在下载页找到自己 ...
- Ubuntu搭建Spring源码环境常见问题
在一心想要学习Spring框架源码时,我们会遇到很多麻烦的问题.开始本文前,你只需要拥有一个装好IDEA的Ubuntu系统就可以愉快启程了.如果还没有IDEA,可以参考在Ubuntu上安装Intell ...
- 在Eclipse上通过插件获取github上的spring源码
spring源码开始的时候是通过SVN来管理代码的,后来是转移到github上管理源码的,可以通过在github上直接下载spring的源码. 下面讲解如何通过在eclipse上的插件git来获取sp ...
- 源码编译安装lnmp环境
一.源码编译安装步骤 首先说明源码安装的好处 速度快,可自定义路径 主要有三步:1.配置 进入源码安装包 ./configure --prefix=/uer/local/nginx 可指定参数 ...
- spring5源码编译过程中必经的坑
spring源码编译流程:Spring5 源码下载 第 一 步 : https://github.com/spring-projects/spring-framework/archive/v5.0.2 ...
随机推荐
- w10环境vs2017,vs2019配置Opengl快捷方法
最近,计算机图形学老师向我们布置了任务,配置自己的opengl.百度之后我发现很多教程和方法尝试之后,我发现一种简单的方法来分享给大家. 首先我的软件配置是w10专业版系统+Visual Stdio ...
- Xgboost的基本使用
import xgboost as xgb from sklearn.model_selection import train_test_split import pandas as pd data ...
- Ubuntu 11.04 LAMP+JSP环境安装过程
安装LAMP命令:sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysq ...
- 实践:Linux下安装mysql8.0
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.下载mysql8.0安装包 1.在local创建mysql文件夹 cd /usr/local mkdir mysql cd mysql 2.使 ...
- K8S原来如此简单(五)Metrics Server与HPA
什么是HPA https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/ 我们前面有通过kubectl ...
- 浅谈spin lock 与信号量
理解阻塞和非阻塞概念: eg: open->read->close eg: open->while(read)->close read -> data received/ ...
- iOS全埋点解决方案-应用退出和启动
前言 通过应用程序退出事件,可以分析应用程序的平均使用时长:通过应用程序的启动事件,可以分析日活和新增.我们可以通过全埋点方式 SDK 实现应用程序的退出和启动事件. 一.全埋点的简介 目前. ...
- C++ 并发编程1
一个简单的并发编程的举例 #include <iostream> #include <thread> using namespace std; void hello(){ co ...
- Linux(centos7)安装RabbitMQ
由于RabbitMQ是由Erlang语言开发的,所以我们需要体检安装erlang语言的环境 下载这三个安装包:https://www.aliyundrive.com/s/4AxfTepHjMD 执行安 ...
- redis之 主从复制和哨兵(一)
一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...