Spring源码编译

842 阅读2分钟

史上最全本地编译Spring源码教程,帮你踩了很多坑。编译源码只是第一步,接下来会有Spring系列文章慢慢揭开Spring的神秘面纱。

环境基础

安装gradle

  1. 配置环境变量
  • 新建环境变量
GRADLE_HOME = D:\gradle-4.4.1-bin\gradle-4.4.1
GRADLE_USER_HOME = D:\maven\repository
  • 新增Path系统变量
%GRADLE_HOME%\bin

2.验证是否成功,打开cmd。输入gradle -v 3.Gradle一定要安装和Spring源码种对应的版本。 对应版本查看:gradle/wrapper/gradle-wrapper.properties。Spring 5.0.* 对应gradle版本是 gradle-4.4.1-bin.zip

下载Spring源码

  • 在github上下载Spring源码,下载之后一定要记得 切换版本,具体什么版本可以根据本地的jdk环境选择。目前master分支,必须jdk11以上。所以我建议切换到5.0.* 版本配合jdk8.下载完成之后根据 import-into-idea.md提示,需要提前编译2个模块。

  • 预编译Spring-oxm模块 ./gradlew :spring-oxm:compileTestJava

precompile.jpg

  • 预编译Spring-core模块 ./gradlew :spring-core:compileTestJava

导入idea

预编译成功之后就可以通过gradle导入spring到idea project。

1621330487(1).jpg

  • 配置gradle本地maven仓库

1621330614(1).jpg

  • 配置Gradle镜像加速 修改项目build.gradle文件

1621330733(1).jpg

  • 构建整个spring-ramework

1621330890(1).jpg

等待构建成功,构建完成之后,若idea无法识别模块化项目,重启下idea。

新建spring-learn模块

为了后期了解学习源码,新建一个spring-learn模块,在里面写自己的测试代码。

1621331070(1).jpg 等待项目完全创建好,会默认帮我们创建好一个子模块。

1621331169(1).jpg

可以在子模块种进行编码,测试一下Spring相关功能。 在build.gradle中dependencies节点新增spring-context依赖 implementation(project(":spring-context"))

image.png 之前这里依赖一直不成功,挣扎了很久,索性删掉旧的moudle,rebuild整个项目,重新创建moudle得以解决。 test/java目录新增2个java类

public class MainConfig {

	@Test
	public void test() {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:beans.xml");
		User user = ctx.getBean(User.class);//此处打断点
		System.out.println("user = " + user);
	}
}
public class User {
	private String username;
	private String address;

	@Override
	public String toString() {
		return "User{" +
				"username='" + username + '\'' +
				", address='" + address + '\'' +
				'}';
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}

resources目录新建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 class="com.poppy.User" id="user">
	<property name="username" value="enjoyican"/>
	<property name="address" value="www.enjoyican.com"/>
</bean>

</beans>

执行MainConfig类的test方法,观察控制台输出

image.png 到此,整个Spring源码环境已经搭建完成。

小结

  1. 之前由于gradle版本,jdk版本,Spring版本导致踩过很多坑,所以一定要保持3者版本一致。
  2. 最开始用的idea2017也是一直没成功,后来直接升级到2021版本,任然不行。果断选择降级到2019.2.4,所以推荐这个版本。
  3. gradle 控制台中文乱码。Help > Edit Custom VM Options 增加一行 -Dfile.encoding=UTF-8 ,重启idea解决。

Refrence

JDK1.8及Spring5.0.x源码环境搭建