Spring源码阅读(一):使用IDEA搭建Spring5.0.x源码阅读环境
说明
Spring源码阅读环境配置如下:
- Spring 5.x版本
- Gradle 4.8.1
- JDK8
- IDEA2020.1
- win10
搭建步骤
1. 下载Spring源码
下载地址:Github链接,选择5.x版本
如果Github下载过慢,可以使用码云加速,镜像地址
另一种办法是通过梯子配置代理,也可以加速下载
2. 配置Gradle
Spring基于gradle构建,需要先安装配置Gradle
Gradle下载地址,选择complete版本,下载后加入环境变量,通过gradle -v验证是否配置成功
3. 构建项目
在进行预编译之前,需要检查以下几个地方:
- gradle.properties: 查看版本是否正确
- jdk版本和gradle版本
在代码目录下执行命令:
gradlew :spring-oxm:compileTestJava
等待编译成功。编译过程可能遇到如下问题:
- An exception occurred applying plugin request [id: 'com.gradle.build-scan', version: '1.8']
解决办法:Gradle版本问题,具体原因参考此链接
| Gradle Build Tool versions | Minimum plugin version | Maximum plugin version |
|---|---|---|
| >= 6.0 | 3.0 | 3.3.1 |
| 5.0 - 5.6.4 | 2.0.2 | 3.3.1 |
| 4.1 - 4.10 | 1.8 | 1.16 |
| 4.0 | 1.7.4 | 1.16 |
| 2.0 - 3.5 | 1.0 | 1.16 |
| < 2.0 | not supported | not supported |
- org.gradle.api.CircularReferenceException: Circular dependency between the following tasks:
:spring-beans:compileGroovy
--- :spring-beans:compileJava
--- :spring-beans:compileKotlin
--- :spring-beans:compileGroovy (*)
解决办法:循环引用问题,注释掉下面三行
4. 导入IDEA
File -> New -> Project from Existing Sources -> 找到 Spring 项目路径 -> 选中 build.gradle,并配置gradle,如下图所示
接下来idea会进行很长时间的build,下载相关jar包,耐心等待即可
可能出现如下问题:
- 缺少jar包:spring-cglib-repack-x.x.x.jar、spring-objenesis-repack-x.x.jar
解决办法:在spring的解压目录下执行下面这两个命令
gradle objenesisRepackJar
gradle cglibRepackJar
调试代码
新建module,编写自己的代码,对spring代码进行走读。
关于module相关知识,可以参考另一篇文章:IDEA中Project和Module的关系
项目右击,New->Module
当然也可以创建基于Maven的module,如下所示:
创建module子项目以后,需要添加module依赖,方便导入相关包。如下所示:
至此,可以写代码了。我们创建一个简单的java bean,并打印。
Person.java:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="person" class="org.wds.Person">
<property name="name" value="zhangsan"/>
</bean>
</beans>
Main.java:
public class Main {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
Person obj = (Person) context.getBean("person");
System.out.println(obj.getName());
}
}
运行结果如下所示:
至此,环境搭建成功,可以通过打断点对源代码进行调试和走读。
作者:Landuy
链接:https://www.jianshu.com/p/9c48dd941c61
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Spring源码阅读(一):使用IDEA搭建Spring5.0.x源码阅读环境的更多相关文章
- 其他:Spring5.0框架源码导入IDEA
1.下载Spring spring-framework-5.0.4.RELEASE下载地址:https://github.com/spring-projects/spring-framework/re ...
- Idea1.5使用Maven搭建Apache Spark1.6源码阅读环境
1.插件安装,在Idea界面依次:File->settings->plugins,安装Maven 2.下载Spark1.6.2源码,这个在GitHub上下载,具体流程自己百度,很简单 3. ...
- Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...
- spring5.0源码项目搭建
一.准备相应环境以及下载spring项目 Ps:此处只讲解安装gradle 1.JDK安装 2.Idea安装 3.gradle安装 Gradle下载路径:https://services.gradle ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...
- 前端项目模块化的实践1:搭建 NPM 私有仓库管理源码及依赖
以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...
- Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE
Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE
- Spring源码分析之IOC的三种常见用法及源码实现(二)
Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...
- Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码
目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...
随机推荐
- C++第五节课 函数默认值 函数重载
#include <iostream> using namespace std; // C++的函数默认值和函数重载 // 函数参数的入栈规则从右往左开始入栈 // 函数重载机制(第一种静 ...
- NTPShell
NTPShell 获取地址:https://github.com/aplyc1a/NTPShell 通过NTP协议来负载C2数据. 编译 gcc ntp.c -lpthread -o ntp 使用 c ...
- 云原生周刊:OpenTofu Registry 获得用户界面和 API|2024.9.9
开源项目推荐 kubectl trace kubectl trace 是一个 kubectl 插件,它允许你在 Kubernetes 集群中调度执行 bpftrace 程序. Kondense Kon ...
- KubeSphere 社区双周报| 2024.08.02-08.15
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- idea项目提交到码云
第一步:创建一个项目 第二步:在码云上新建一个项目.[注意把使用Readme复选框取消掉] 第三步:复制gitee地址 第四步:创建本地git仓库 第五步:选择自己需要上传到码云的项目名 第六步:提交 ...
- linq+lambda+delegate,从list中查找到满足匹配条件的所有数据索引值
linq的扩展方法中有FindIndex,FindLastIndex两个方法可以查找满足条件的首个和最后一个数据的索引值,利用delegate将匹配条件的方法传入FindAllIndex,查找满足匹配 ...
- 洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
题目大意 小A和小B,要进行 \(N\) 次猜拳,每次按照一定周期出拳,胜负情况如下: 求出小A和小B分别赢了几次. 思路 枚举 \(N\) 次猜拳,每次比较 \(a[powera]\) 与 \(b[ ...
- docker存储配置与管理--项目三
一.Docker存储概念 1.容器本地存储与Docke存储驱动 容器本地存储:每个容器都被自动分配了内部存储,即容器本地存储.采用的是联合文件系统.通过存 储驱动进行管理. 容器本地存储空间:分层结构 ...
- PLSQL安装配置与汉化
一.下载安装 1.官方安装包下载链接:https://www.allroundautomations.com/plsqldev.html 如下图所示,可自行选择32位或者64位 2.下载后双击安装至指 ...
- 使用 C# 入门深度学习:Pytorch 基础
教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 1.2 Pytorch 基础 本文内容介绍 Pytorcn 的基础 API,主要是数组的创 ...