前言
Java世界中主要有三大构建工具:Ant、Maven 和 Gradle。
目前 Ant 用的很少了,在 Tomcat 源码中使用的还是 Ant 构建的。
Spring 源码中并没有使用到 Maven 构建项目,而是用的 Gradle,所以需要用到 Gradle 工具,大家可以提前去下载 Gradle 工具,不想自己下的也可以自动下载,具体是怎么自动下载的往下看…
一、下载Spring 5.2.x版源码
下载地址:https://github.com/spring-projects/spring-framework
ps:可以使用git克隆,也可以直接下载压缩包进行解压。
因为 Spring 默认是国外的 Gradle 镜像,构建源码依赖的时候会很慢,所以修改为国内阿里的镜像地址。进入 Spring 根目录下的 build.gradle 文件,Ctrl+F 搜索 repositories,然后把它里面的值修改为以下内容:
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
二、构建Spring源码
在Spring源码的根路径下有这么一个文件:import-into-idea.md,这个文件会告诉你如何将Spring源码导入到IDEA中。如果这个文档看不懂没关系,咱们接着往下看…
- win+r输入cmd进入Spring源码根路径下,执行命令:
gradlew.bat
这条命令首先会根据配置下载 Gradle 工具, 这个配置文件在 Spring 源码根路径下的 gradle\wrapper\gradle-wrapper.properties 文件中,进入该文件可以看到:distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-bin.zip,这条配置信息就是 gradle 工具的下载地址,然后它会先自动下载 gradle 工具。下载好后会进行编译,再等待一会… 出现 BUILD SUCCESSFUL 的提示就表示成功。
- 编译spring-oxm 模块,执行命令:
gradlew.bat :spring-oxm:compileTestJava
这条命令是从 import-into-idea.md 文件中看到的。不同版本 Spring 源码可能这条命令也会有所不同,比如有的是:gradlew.bat cleanIdea :spring-oxm:compileTestJava,所以说不要盲目 copy。以下结果表示执行成功:
其中 Gradle 5.6.4 会被下载到 C:\Users\Administrator.gradle\wrapper\dists\gradle-5.6.4-bin 目录下,进入这个文件可以看到一串字母加数字的文件 bxirm19lnfz6nurbatndyydux\gradle-5.6.4,然后这个文件中就是Gradle 真正存储的位置。
三、Spring源码导入IDEA
打开 IDEA,点击 Open 直接打开你的 Spring 源码,配置 Gradle 和 JDK ,最后 FInish 即可。
然后 IDEA 通过本地的 Gradle 5.6.4 工具来编译 Spring 项目,这个时间可能会比较慢…等待一段时间…等的时间不妨点个赞支持一哈哈哈哈鹅。当所有的模块都出现个小小的蓝色图标,表示编译成功,至此 Spring 源码导入完成。
四、创建测试项目
-
创建一个自己的测试 module:右击项目 -> new -> module -> gradle。
-
在新项目的 build.gradle 下添加对spring模块的依赖,这里我先添加了 spring-beans 、spring-core和spring-context 的依赖。
compile(project(":spring-beans")) compile(project(":spring-core")) compile(project(":spring-context"))
-
在新项目的 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 id="myTestBean" class="cc.bieber.MyTestBean"/> </beans>
-
创建测试 Bean 和启动类
/**
* @author Mebieber
* @desc 自定义的测试Bean
*/
public class MyTestBean {
private String name = "Mebieber";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cc.bieber.spring;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author Mebieber
* @desc 启动类
*/
public class AppTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("spring-config.xml");
MyTestBean myTestBean = (MyTestBean) app.getBean("myTestBean");
System.out.println("My Name is " + myTestBean.getName());
}
}
运行时共会报两个错:CoroutinesUtils 错误和 InstrumentationSavingAgent 错误。
1)解决 CoroutinesUtils 错误
双击这个报错会进入到 ReactiveAdapterRegistry 这个类,然后按住 Ctrl+左键进入 CoroutinesUtils.kt,这个文件是由 kotlin 语言编写的(Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言)。好了,不买关子了,其实解决这个问题很简单,只需要编译一下 spring-core 模块下的 main 包就可以了,哈哈哈是不是好简单…
2)解决 InstrumentationSavingAgent 错误
spring-context的依赖发现,spring-instrument 在 spring-context 中为 optional 依赖:optional(project(":spring-instrument")),于是在自己的模块中添加spring-instrument依赖。
在项目的 build.gradle 下添加以下依赖:
compile(project(":spring-instrument"))
再次运行项目就不会报错啦!!!
接下来就可以愉快的调试代码啦哈哈哈鹅…
感谢
参考:https://www.cnblogs.com/java-chen-hao/p/11046190.html#_label0#commentform