idea 2021.3.3
spring 5.2.x
jdk1.8 or 以上版本
gradle-6.1版本 (源码版本查看gradle文件夹)
2、gradle与spring源码下载参考文献一进行下载与配置gradle(参考文献在最后,资源版本保持和本文一致)
3、spring源码配置 3.1、gradle-wrapper.properties配置路径:根目录gradle/wrapper/gradle-wrapper.properties
使用下载好的gradle.zip替换原有的路径,这样就不需要去网上在下载,直接下载本地加快构建速度
注:spring项目中有些地方需要使用到gradle.zip中的依赖,会自动解压
distributionUrl=file:///D:/tools/gradle-6.1-bin.zip3.2、build.gradle配置
路径:根目录/build.gradle
1、注释io.spring.ge.conventions;避免发生不可避免的错误
2、更改kotlin版本为1.3.61
3.3 配置gradle阿里镜像1、配置build.gradle镜像
路径:根目录/build.gradle
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
2、配置settings.gradle镜像
路径:根目录/settings.gradle
maven {url 'https://maven.aliyun.com/repository/public'}
3.4 解决gradle-6.0不能构建build-scan
1、注释以下内容
路径:根目录/gradle/spring-module.gradle,注释一下内容
2、注释build-scan
路径:根目录/build.gradle
3、添加build-scan插件下载路径,走自定义下载路径
路径:根目录/settings.gradle
plugins {
id "com.gradle.enterprise" version "3.5"
}
gradleEnterprise {
server = "https://gradle-enterprise.mycompany.com"
}
3.5 解决预编译kotlin循环依赖问题
路径:根目录/spring-beans/spring-beans.gradle
tasks.named('compileGroovy') {
classpath = sourceSets.main.compileClasspath
}
tasks.named('compileKotlin') {
classpath += files(sourceSets.main.groovy.classesDirectory)
}
3.6 解决gradle bulid慢的问题
路径:根目录gradle.properties
org.gradle.jvmargs=-Xmx2048M //按需配 org.gradle.configureondemand=true //开启守护进程 org.gradle.daemon=true4、idea导入源码 5、idea配置gradle 6、等待导入成功
编译日志如下:
7、预编译使用idea工具导入编译可查看import-into-idea.md;具体使用点击compileJava运行
8、源码测试1、完成了上面的过程后,我们可以自己编写一个模块测试该源码构建编译过程是否真正成功完成!
步骤:【File】->【New】->【Module…】
在Spring中添加自己的module模块,同样选择gradle构建。
2、新模块Parent:spring,Name:spring-mytest(我们的测试模块作为spring源码的子模块添加进来,下面的配置默认即可)
3、Finish,idea会自动帮助我们构建spring-mytest模块
打开全局配置文件:settings.gradle文件,拉到最下面,我们看到系统自动加上了spring-mytest模块。
找到我们自己的测试模块spring-mytest,打开build.gradle文件(相当于是pom文件),默认dependencies依赖(这里的dependencies和maven里的依赖是一样的)只有一个junit,我们需要手工添加spring-context,spring-beans,spring-core,spring-aop这4个核心模块,具体如下:
//添加完要构建一下,否则代码中无法引用
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
testCompile group: 'junit', name: 'junit', version: '4.12'
4、下面编写一个简单的applicationContext获取容器用的bean,主要是测试Spring源码构建编译过程是否成功!
新增实体类:
package com.xieyang.bean;
public class User {
private String id;
private String userName;
public User() {
}
public User(String id, String userName) {
this.id = id;
this.userName = userName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "User{" +
"id='" + id + ''' +
", userName='" + userName + ''' +
'}';
}
}
在resources新增spring-test.xml文件
最后写一个测试类Test.java
public class MyTest {
public static void main(String[] args) {
//AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-test.xml");
User user = (User)applicationContext.getBean("user");
System.out.println(user.toString());
}
}
运行,console输出
参考文献:文献一:
Spring源码编译一次性通过&遇到的坑解决方法
文献二:
gradle6.5不支持build-scan插件-解决办法_belief95的博客-CSDN博客
文献三:
spring5.x.x源码编译完后,spring-beans项目运行compileTestJava报循环依赖错误_lijunlinlijunlin的博客-CSDN博客
文献四:
spring5.3.x源码阅读环境搭建_smart哥的博客-CSDN博客_spring源码搭建



