spring 5.3 源码编译
前言
最近开始学习spring源码,但是编译很烦,成功过几次都觉得好像是运气一样,所以记录一篇自己的编译教程
但是人很菜,中间还有很多自己没遇到的问题不是很懂,自己遇到的也没理解很深,希望以后可以更深入的理解
参考:
编译步骤:https://blog.csdn.net/lisijing8201/article/details/118413344
问题解决:https://blog.csdn.net/cjergfgp/article/details/130973319
环境介绍
- spring版本5.3.x
- jdk:本文需要有17
- idea:2023.1.5
- gradle:没有安装本地版,使用的是项目中配置的,版本为8.2.1
- 系统:Windows11,在mac上验证过,也能成功
下载源码
git clone git仓库地址
修改配置
settings.gradle
增加如下配置:
maven { url "https://maven.aliyun.com/repository/public" }
gradle.properties
修改该文件,主要是修改jdk为17,这里尝试过8和11都会出现不同的问题
version=6.1.0-SNAPSHOT
org.gradle.caching=true
org.gradle.jvmargs=-Xmx2048m
org.gradle.parallel=true
kotlinVersion=1.8.22
kotlin.jvm.target.validation.mode=ignore
kotlin.stdlib.default.dependency=false
## 启用新的孵化模式
org.gradle.configureondemand=true
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程
org.gradle.daemon=true
## 配置jdk目录
org.gradle.java.home=C:\\software\\jdk17
build.gradle
增加如下配置
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
spring-core.gradle
修改spring-core目录下的spring-core.gradle文件,删除21,不删除会导致报错,原图如下:
multiRelease {
targetVersions 17
}
gradle-wrapper.properties
指定gradle版本,原版本为8.1.1,尝试较低版本也会出现问题,构建报错,不知道原因,文件目录为gradle/
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
预编译
gradlew :spring-oxm:compileTestJava --warning-mode all
gradlew :spring-core:compileTestJava --warning-mode all
idea 导入
-
第一步
-
第二步
-
点击create以后,就打开项目了,然后等待idea构建项目,完成后进行验证
-
新建一个module,这里jdk可以选择1.8 也可以选择17,不影响
创建测试bean
import org.springframework.stereotype.Component;
/**
* @author fs
* @date 2023/8/16 8:51
*/
@Component
public class User {
public void test(){
System.out.println(123);
}
}
测试
import cn.fs.entity.User;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("cn.fs");
User user = (User) context.getBean("user");
user.test();
}
}
运行代码发现报错,点击Use JDK 17即可
再次运行代码