目录

一、下载Spring源码

二、安装Gradle

三、预编译spring-oxm模块

四、IDEA导入Spring项目

五、排除spring-aspects模块

六、添加测试模块

七、遇到的一些问题


为了能够在调试Spring源码的时候,可以加上一些注释以及理解,方便后续继续复习,但是如果直接使用Class文件调试的话,是没法编辑的,只有在本地搭建Spring源码环境才行,所以本篇文章笔者将记录搭建Spring源码环境的步骤、遇到的问题及解决方案。

一、下载Spring源码

由于github下载比较慢,笔者使用的是码云上面的Spring源码地址:Spring-Framework: Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本

这里我们选择使用5.1.x版本,读者自行选择对应的版本即可。

首先将Spring的源码克隆下来,命令如下:

git clone -b 5.1.x https://gitee.com/mirrors/Spring-Framework

如下图,可以看到Spring的源码文件还是非常多的,异常复杂:

拉取代码以后,查看拉取目录中的import-into-idea.md文档,这个文件是导入IDEA的操作文档,我们按照里面的操作即可:

相应地,也存在import-into-eclipse,导入Eclipse的操作文档,读者根据自己的环境选择对应的文档即可。

将import-into-idea.md文件直接使用浏览器查看:

二、安装Gradle

因为Spring源码使用的是Gradle进行编译,所以我们首先需要在本机安装Gradle环境。

【a】Gradle下载安装

Gradle官网最新发行版下载:Gradle | Releases

可以按自己需求自行下载,这里我是下载的最新的这里我们选择下载:gradle-4.10.3-bin.zip。

下载完成后,将下载的压缩包解压到本机的指定目录(这里解压的目录为E:\development\gradle\gradle-4.10.3)即可,如下图:

【b】配置Gradle的环境变量GRADLE_HOME

首先右键“此电脑”-->"属性"-->"高级系统设置"-->"环境变量"-->"系统变量",然后在系统变量下新建一个变量为GRADLE_HOME的变量,并将Gradle的安装目录路径(E:\development\gradle\gradle-4.10.3)设置为变量值。如下图所示:

【c】配置path环境变量

将Gradle的bin目录添加到path变量值中:%GRADLE_HOME%\bin或者E:\development\gradle\gradle-4.10.3\bin都可以。如下图:

【d】测试Gradle是否安装成功

打开cmd命令窗口,输入 gradle -v 或者gradle -version 查看Gradle版本信息:

我们看到,成功输出Gradle对应的版本信息,证明Gradle已经安装成功。

三、预编译spring-oxm模块

打开刚拉取下来的Spring源码的根目录,使用Git命令进行预编译:

./gradlew :spring-oxm:compileTestJava

执行命令后,会显示正在下载gradle-4.10.3-bin.zip,这个正在下载的Gradle版本就是用来编译你对应Spring源码的版本。

我们从下面的目录也可以看到:Spring-Framework\gradle\wrapper\gradle-wrapper.properties

由于笔者网速不太好,所以这里我将gradle-wrapper.properties里面的distributionUrl修改为本地的gradle-4.10.3-bin.zip,这样快一些。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=gradle-4.10.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

然后将前面一个步骤下载的gradle-4.10.3-bin.zip压缩包放入Spring-Framework\gradle\wrapper目录下,如下图:

接下来修改build.gradle文件:

找到repositories块,将地址改为国内地址,把里面的给注释掉。

maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

如下图:

然后我们就可以重新执行./gradlew :spring-oxm:compileTestJava进行预编译。

如上图,可以看到,预编译成功。在编译过程中,可能会因为网络会报一些错误,如某个jar包没下载成功等,我们只需要重新执行./gradlew :spring-oxm:compileTestJava再次进行预编译就行了。具体可以通过--stacktrace将编译异常信息打印出来查看。

四、IDEA导入Spring项目

使用IDEA (File -> New -> Project from Existing Sources) 选中build.gradle文件:

然后设置Gradle相关信息:

然后IDEA就会开始进行build自动构建。

由上图可见,构建成功,但是Build成功不代表一定能运行成功,可能还是会遇到各种各样的问题,逐一解决即可。

五、排除spring-aspects模块

在IDEA中,排除某个模块很简单。打开File -> Project Structure窗口:

六、添加测试模块

1.项目根目录右键 -> new -> module -> gradle:

新建一个spring模块,起名:spring-test-demo,如下图:

下图为创建好的新模块:

2.在新项目的build.gradle下添加对spring模块的依赖,这里我先添加了spring-beans 和spring-core的依赖,如下:

dependencies {compile(project(":spring-beans"))compile(project(":spring-core"))compile(project(":spring-context"))testCompile group: 'junit', name: 'junit', version: '4.12'
}

3.创建测试bean

package com.wsh;/*** @version V1.0* @ClassName: com.wsh.User.java* @Description:* @author: weixiaohuai* @date: 2021/4/7 14:59*/
public class User {public void hello() {System.out.println("hello, spring...");}}

4.在新项目的src/main/resource下添加spring-config.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.xsd"><!--配置Bean: User--><bean id="user" class="com.wsh.User"/></beans>

5.测试

package com.wsh;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @Description: 测试* @author: weixiaohuai* @Date: 2021/4/7 15:01*/
public class SpringDemo {public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-config.xml");User user = (User) applicationContext.getBean("user");user.hello();}
}

启动main方法,运行结果如下:

如上图,运行成功,至此,Spring源码调试环境就算搭建成功了,接下来开启源码阅读之旅。

七、遇到的一些问题

以下是笔者在搭建过程中遇到的一些问题,读者也许不一定会遇到,也可能会遇到其他各种各样的问题,读者多多查阅一些资料,逐个解决即可。

【a】找不到类 InstrumentationSavingAgent

解决方法:修改spring-context\spring-context.gradle文件中,将optional修改为compile

compile(project(":spring-instrument"))
// optional(project(":spring-instrument"))

【b】Could not find com.ibm.websphere:uow

解决方法:在build.gradle上加上如下配置 :

repositories {maven { url "https://maven.aliyun.com/nexus/content/groups/public" }maven { url "https://repo.springsource.org/plugins-release" }//mavenCentral()
}

至此,我们的Spring源码阅读环境搭建成功,可以愉快的调试Spring的源码了。

Spring搭建本地源码调试环境相关推荐

  1. 搭建Android源码调试环境(三)——调试C/C++(使用CLion)

    前言 aosp自带gdbclient.py脚本用于调试 kevin@kevin-GS60-2PL /mnt/2ffc0bac-5896-499a-9ae6-79e610162482/aosp $ gd ...

  2. xv6 源码调试环境搭建

    一.资源 官网:https://pdos.csail.mit.edu/6.828/2022/ 二.搭建 xv6 调试环境 1.下载 xv6 源码 git clone git://github.com/ ...

  3. webuploader 怎么在react中_另辟蹊径搭建阅读React源码调试环境支持所有React版本细分文件断点调试...

    引言(为什么写这篇文章) 若要高效阅读和理解React源码,搭建调试环境是必不可少的一步.而常规方法:使用react.development.js和react-dom.development.js调试 ...

  4. 【深入浅出 Yarn 架构与实现】1-2 搭建 Hadoop 源码阅读环境

    本文将介绍如何使用 idea 搭建 Hadoop 源码阅读环境.(默认已安装好 Java.Maven 环境) 一.搭建源码阅读环境 一)idea 导入 hadoop 工程 从 github 上拉取代码 ...

  5. Gitolite + repo 搭建安卓源码开发环境

    Gitolite + repo 搭建安卓源码开发环境 转载请注明出处:http://blog.csdn.net/u011479494/article/details/50629669 相比gitosi ...

  6. jdk javac运行不了_Intellij IDEA搭建jdk源码阅读环境

    一.找到源码位置 直接找到jdk安装的目录,会看到src.zip的压缩包,这里面就是jdk的源码,例如下图: 在这里解压. 第一次尝试建议使用9或更早版本jdk的源码,否则易造成卡死. 二.Intel ...

  7. Ubuntu18.04搭建Android源码编译环境

    一.前言 使用Ubuntu18.04搭建Android源码的编译,本文是参考Android系统源码编译文章撰写的. 二.步骤 1.下载Android源码.Ubuntu环境搭建.git安装请参考其他文章 ...

  8. Mac搭建JDK源码阅读环境

    点赞再看,养成习惯,微信公众号搜索[虚竹讲程序经],获取更多技术干货! 想要读懂JDK源码,需要在自己电脑上搭建JDK的源码阅读环境,正所谓,工欲善其事,必先利其器.下面演示如何在Mac上结合Idea ...

  9. 【转载】Spring5源码调试环境搭建

    2020.12更新: gradle 构建spring源码时报错: org.org.gradle.internal.resource.transport.http.HttpErrorStatusCode ...

  10. Tomcat源码调试环境搭建

    我们一般都是为了解决某个问题,才去看源码的.Java体系就是这点好处,源码唾手可得.遇到问题,最后的解决方法总是可以从源码中找到. 参考了网上的文章,过程整理如下: 1. 下载和导入 官网下载编译好的 ...

最新文章

  1. python购物车程序2019_python购物车程序
  2. 计算机组成原理DMA方式原理,计算机组成原理4(程序查询方式、程序中断方式、DMA方式及其I/O接口电路)...
  3. Spring Boot自动配置原理
  4. Angularjs Services
  5. 每日记载内容总结22
  6. Ubuntu 16.04 x64 常用软件
  7. 强连通分量(tarjan求强连通分量)
  8. 对n个数进行排序(正序或者倒序)--06 年华科计算机保研机试真题
  9. 防病毒网关、防火墙与防病毒软件功能及部署对比
  10. 微云php解析源码,微云网盘外链php源码 - 兼容并蓄 - 零零星星 - php - 外链 - 微云 - 源码 - HHTjim'S 部落格...
  11. 陈莉君教授: 回望踏入Linux内核之旅(下篇)
  12. java创建临时文件夹_Java 创建文件、文件夹以及临时文件
  13. 搞算法的仙女妹子,爱了!!
  14. PyQt4对话框(dialog类型介绍)
  15. [拉格朗日乘数法 二分] BZOJ 2876 [Noi2012]骑行川藏
  16. 数据库和表的基本操作
  17. 把图片压缩成指定大小,释放你的内存空间
  18. js 排班插件_最近做的排班表,整个表格全JS动态生成,用了很多Jquery的库,4个主要页面...
  19. 鸿蒙不用百度网盘,百度网盘限速有救了!官方新出2种方法,不用开会员
  20. 海尔简爱s11装Linux,海尔简爱S11笔记本U盘安装win7系统的操作教程

热门文章

  1. 如何自定义安装mysql_安装MySQL
  2. Zoox 的自动驾驶汽车方法
  3. 算法:从有序数组中移除重复的数据26. Remove Duplicates from Sorted Array
  4. 极客大学架构师训练营 框架开发 模式与重构 JUnit、Spring、Hive核心源码解析 第6课 听课总结
  5. linux sysvinit 机制,Linux基于SysVinit和systemd实现开机自启动服务
  6. ie浏览器框架不显示_Python 爬虫(四):Selenium 框架介绍与使用
  7. HDU 2144(最长公共子序列+并查集)
  8. 不动点迭代法的收敛阶
  9. Raki的读paper小记:LAMOL: LANGUAGE MODELING FOR LIFELONG LANGUAGE LEARNING
  10. IM消息重试机制Java实现_消息的重试机制的设计思路