史上最全本地编译Spring源码教程,帮你踩了很多坑。编译源码只是第一步,接下来会有Spring系列文章慢慢揭开Spring的神秘面纱。
环境基础
- jdk1.8
- idea 2019.2.4 www.jetbrains.com/idea/downlo…
- Spring 5.0.* github.com/spring-proj…
- gradle 4.4.1 gradle.org/releases/
安装gradle
- 配置环境变量
- 新建环境变量
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
- 预编译Spring-core模块
./gradlew :spring-core:compileTestJava
导入idea
预编译成功之后就可以通过gradle导入spring到idea project。
- 配置gradle本地maven仓库
- 配置Gradle镜像加速 修改项目build.gradle文件
- 构建整个spring-ramework
等待构建成功,构建完成之后,若idea无法识别模块化项目,重启下idea。
新建spring-learn模块
为了后期了解学习源码,新建一个spring-learn模块,在里面写自己的测试代码。
等待项目完全创建好,会默认帮我们创建好一个子模块。
可以在子模块种进行编码,测试一下Spring相关功能。
在build.gradle中dependencies节点新增spring-context依赖
implementation(project(":spring-context"))
之前这里依赖一直不成功,挣扎了很久,索性删掉旧的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方法,观察控制台输出
到此,整个Spring源码环境已经搭建完成。
小结
- 之前由于gradle版本,jdk版本,Spring版本导致踩过很多坑,所以一定要保持3者版本一致。
- 最开始用的idea2017也是一直没成功,后来直接升级到2021版本,任然不行。果断选择降级到2019.2.4,所以推荐这个版本。
- gradle 控制台中文乱码。Help > Edit Custom VM Options 增加一行
-Dfile.encoding=UTF-8
,重启idea解决。
Refrence