idea构建spring源码环境

前言

最近抽空在摸索spring源码,就想在idea中把spring源码环境给跑起来,以便于自己进行断点调试和学习,但在自己构建的时候才发现使用idea构建spring源码的环境的确不是一件简单简单的事情,下面就记录一下自己构建源码的过程和遇到的坑

1、安装gralde环境

可以通过这个链接下载合适的版本的gradle,建议不要下载抬高的版本,我这里使用的是4.4的版本,版本太高,后面在idea中编译的时候有些spring的组件下载不了:https://services.gradle.org/distributions/

gralde的安装非常简单,就和配置jdk一样的道理,将主目录配置到环境变量即可
在这里插入图片描述
在这里插入图片描述
然后加入到path中即可:
在这里插入图片描述

然后cmd打开黑窗口,测试一下是否安装成功,
在这里插入图片描述

2、github下载spring源码
进入spring官网,然后从下面的窗口进入到github
在这里插入图片描述
在这里插入图片描述
右上角的小猫头像,到了这里想必大家肯定知道怎么下载了吧,我这里直接将zip的包下载到本地,对应的版本是5.x的
在这里插入图片描述

3、使用gradle编译源码

解压zip包,cmd代开打开窗口,直接在当前spring的根目录下执行命令:gradlew.bat即可,这个是spring提供的
在这里插入图片描述
在这里插入图片描述

编译的过程可能有点儿长,我这里等待了差不多4分多钟才全部执行完毕,
在这里插入图片描述
在这里插入图片描述

也有人说可以直接在idea中配置gradle的环境然后放到idea中进行编译,我这里直接在本地编译了

4、idea导入编译完成的源码

打开IDEA,File->New->Project From Existing Sources…,选中spring-framework源码文件夹,点击OK,选择Import project from external model,选中Gradle,点击Next

在这里插入图片描述
这里建议使用默认的就好,我第一次配置本地的gradle中间错了2次,意思大概是还要配置其他的依赖,所以就放弃了
在这里插入图片描述

导入后,idea就开始自动进行编译,导入相关的依赖jar包了,第一次会非常慢,需要点儿耐心
在这里插入图片描述
基本上看到这里就说明准备工作就全部完成了

5、编写测试代码

在根目录下创建一个子模块
在这里插入图片描述
配置一下依赖,就像maven中依赖某个pom一样,gradle默认创建时就有两个依赖,再加上spring-context即可

在这里插入图片描述
写一段测试的方法,这里我们想测试自己创建的bean是否能被spring管理,

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Main {

	@Bean("person")
	public Person person() {
		return new Person("Hello");
	}

	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class);
		System.out.println((Person) context.getBean("person"));
	}

}

class Person {
	String name;

	@Override
	public String toString() {
		return "Person{" +
				"name='" + name + '\'' +
				'}';
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Person(String name) {
		this.name = name;
	}
}

然后直接运行这段程序,但是报了两个严重的错误,第一个错误的日志大致如下:

1、DefaultNamingPolicy依赖没有找到,即下面这个类
在这里插入图片描述
解决办法,分析原因后,它来源于spring-cglib-repack、spring-objenesis-repack这两个jar文件,因此需要把这两个依赖的jar包安装上,直接进入本地的源码主目录在cmd窗口执行:gradle objenesisRepackJar 、 gradle cglibRepackJar等待安装成功即可
在这里插入图片描述

第二个错误,从描述来看,应该是没有编译到这个文件,然后全局搜索一下定位到这个文件的位置,

Error:(26, 38) java: 找不到符号
  符号:   类 InstrumentationSavingAgent
  位置: 程序包 org.springframework.instrument

在这里插入图片描述

把optional修改为compile即可,
在这里插入图片描述

再次启动程序,经过短暂的等待后,控制台就打印了预想中的结果,说明通过源码的方式可以调试spring环境了
在这里插入图片描述

我们不妨随点点击进去看看,
在这里插入图片描述
这样的话点击进来就可以加注释,写笔记,写调试代码了,是不是很爽快
在这里插入图片描述

本篇到这里就结束了,希望对看到的同学有用,最后,感谢观看!

发布了193 篇原创文章 · 获赞 113 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/zhangcongyi420/article/details/103334828