说明

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源码阅读环境的更多相关文章

  1. 其他:Spring5.0框架源码导入IDEA

    1.下载Spring spring-framework-5.0.4.RELEASE下载地址:https://github.com/spring-projects/spring-framework/re ...

  2. Idea1.5使用Maven搭建Apache Spark1.6源码阅读环境

    1.插件安装,在Idea界面依次:File->settings->plugins,安装Maven 2.下载Spark1.6.2源码,这个在GitHub上下载,具体流程自己百度,很简单 3. ...

  3. Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...

  4. spring5.0源码项目搭建

    一.准备相应环境以及下载spring项目 Ps:此处只讲解安装gradle 1.JDK安装 2.Idea安装 3.gradle安装 Gradle下载路径:https://services.gradle ...

  5. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  6. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  7. 前端项目模块化的实践1:搭建 NPM 私有仓库管理源码及依赖

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  8. Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE

    Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE

  9. Spring源码分析之IOC的三种常见用法及源码实现(二)

    Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...

  10. Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码

    目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...

随机推荐

  1. .Net 的扩展方法

    // 扩展方法 // ps:js中的扩展方法 比如 给数组定义一个自定义的全局的方法 使用 prototype (原型链) // .Net 给 string 添加一些扩展方法 String 是一个密封 ...

  2. CSharp的Where底层实现

    using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...

  3. 3. 用过Konva吗,用过他的api吗

    基础:使用konva,首先需要创建舞台也就是stage,然后创建一个Layer图层,将图层放到舞台上,将图形等内容放到图层上 ; 第一步:创建一个Stage舞台  , 就是创建一个 stage 实例 ...

  4. Tarjan 算法

    远古算法笔记. dfs 生成树 无向图 对于一张连通的无向图,我们可以从任意一点开始 dfs,得到原图的一棵生成树(以开始 dfs 的那个点为根). 这棵生成树上的边称作树边,不在生成树上的边称作非树 ...

  5. KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  6. md转换成_post下直接使用的文件

    md转换成_post下直接使用的文件 package org.example; import java.io.File; import java.io.IOException; import java ...

  7. 小程序框架开发笔记-wepy

    WePY 一.前置 本地使用版本V1.7.3最新版本V2.x            二.使用 export class App extends wepy.app {} 小程序入口,App基类 wepy ...

  8. 30k的测试简历长这样,进来抄作业!

    面试求职: 「面试试题小程序」,内容涵盖 测试基础.Linux操作系统.MySQL数据库.Web功能测试.接口测试.APPium移动端测试.Python知识.Selenium自动化测试相关.性能测试. ...

  9. c++11新增内容

    记录一下c++11新特性方便以后回忆 1.nullptr (对标NULL) 2.auto ,decltype(根据表达式推断类型,表达式不执行) decltype(func()) sum = 5; / ...

  10. 【更新日志】AI运动识别插件又双叕发布更新了,v1.5.4版已正式发布。

    Ai运动识别插件可以为您的小程序赋于原生的人体检测.运动识别.姿态识别.运动计时计数AI能力,让您的小程序轻松实现AI健身.线上运动会.学生体测等场景,并拥有大量的用户案例,针对近期开发者的反馈,我们 ...