安装Gradle

因为Spring项目是用Gradle管理的,所以得先安装Gradle,本文编译的源码版本为5.2.2.RELEASE

最好用和源码一个版本的gradle,不然会有各种问题,直接访问源码中带的链接即可

Spring源码编译,导入IDEA,调试源码_java

新建环境变量

export GRADLE_HOME=/Users/peng/software/gradle-5.6.4
export PATH=$PATH:$GRADLE_HOME/bin

命令行输入

gradle -v

输出版本则表示安装正确

spring项目github地址:
​​​ https://github.com/spring-projects/spring-framework​

编译后导入IDEA

在spring-framework文件夹下执行如下命令

gradlew :spring-oxm:compileTestJava

或者

./gradlew :spring-oxm:compileTestJava

由于网络的原因中途可能会失败,多执行几次即可,最后看到BUILD SUCCESSFUL即可

导入的时候选中用本地下载好的gradle即可

Spring源码编译,导入IDEA,调试源码_java_02

建立调试源码子模块

File->New->Module

Spring源码编译,导入IDEA,调试源码_.net_03

在新建的模块中加入spring-context依赖,放一下我的build.gradle

plugins {
id 'java'
}


sourceCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
compile project(':spring-context')
testCompile group: 'junit', name: 'junit', version: '4.12'
}

建立一个配置类

@Configuration
@ComponentScan("com.javashitang")
public class AppConfig {


}
@Repository
public class UserDao {

public String getUser() {
return "user";
}
}

测试类

public class Main {

public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserDao userDao = context.getBean(UserDao.class);
String str = userDao.getUser();
System.out.println(str);
}
}

建立测试项目跑的时候发现找不到这个类

org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar.CoroutinesUtils

然后又是找不到如下2个类

org.springframework.instrument.InstrumentationSavigAgent
org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver.InstrumentationAccessor.InstrumentationSavingAgent

到spring-context.gradle模块,将内容改为如下

# 修改前
optional(project(":spring-instrument"))
# 修改后
compile(project(":spring-instrument"))

再跑测试项目,正常输出,能正常调试

参考博客

spring boot报错([ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:exec (gradle) on project spring-boot-gradle-plugin: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1])
[4]https://www.codetd.com/article/10425491