Spring源码编译,导入IDEA,调试源码
原创
©著作权归作者所有:来自51CTO博客作者wx6289ced28e34b的原创作品,请联系作者获取转载授权,否则将追究法律责任
安装Gradle
因为Spring项目是用Gradle管理的,所以得先安装Gradle,本文编译的源码版本为5.2.2.RELEASE
最好用和源码一个版本的gradle,不然会有各种问题,直接访问源码中带的链接即可

新建环境变量
export GRADLE_HOME=/Users/peng/software/gradle-5.6.4
export PATH=$PATH:$GRADLE_HOME/bin
命令行输入
输出版本则表示安装正确
spring项目github地址:
https://github.com/spring-projects/spring-framework
编译后导入IDEA
在spring-framework文件夹下执行如下命令
gradlew :spring-oxm:compileTestJava
或者
./gradlew :spring-oxm:compileTestJava
由于网络的原因中途可能会失败,多执行几次即可,最后看到BUILD SUCCESSFUL即可
导入的时候选中用本地下载好的gradle即可

建立调试源码子模块
File->New->Module

在新建的模块中加入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