1 下载Spring源码
git clone https://github.com/spring-projects/spring-framework
2 下载Gradle
下载地址:https://gradle.org/install/#helpful-information
因为spring源码和gradle有版本一致性的问题,下载安装完gradle之后需要在spring源码根目录执行响应的gradle版本设置:
./gradlew wrapper --gradle-version=7.4.2 --distribution-type=bin
3 spring源码编译
进入spring源码根目录下执行:
./gradlew :spring-oxm:compileTestJava
4 导入spring源码到IDEA
修改spring源码根目录中的gradle.properties文件:
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
File -> New -> Project from Existing Sources -> 找到选择spring-framework源码并且导入:
配置项目用本地的gradle,不用idea自带的,并且设置jdk为11:
这个时候idea就会开始自动build了,等待即可
5 排除模块
可右击某个模块 -> Load/Unload Modules->Unload 即可:
6 创建调试测试模块
选择File->New->Module,然后选择Gradle,选择jdk为1.8,模块名为spring-debug,创建完成之后拷贝spring-test的gradle配置到sping-debug中进行覆盖,并修改描述为Spring Debug
编写测试类:
package com.redisread.bean.test;
public class MyTestBean {
private String testStr = "testStr";
public String getTestStr() {
return this.testStr;
}
public void setTestStr(String testStr) {
this.testStr = testStr;
}
}
创建bean配置文件:
<?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.xsd">
<bean id = 'myTestBean' class="com.redisread.bean.test.MyTestBean"/>
</beans>
新建单测:
package com.redisread.bean.test;
import junit.framework.TestCase;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MyTestBeanTests extends TestCase {
@Test
public void testSimple() {
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"));
MyTestBean bean = (MyTestBean) bf.getBean("myTestBean");
System.out.println(bean.getTestStr());
assertEquals("testStr", bean.getTestStr());
}
}
就可以打断点调试了!
常见错误参考
-
使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决 - 本宫在,尔等都是妃 - 博客园
编译过程中出现与 ‘-Werror’ 有关的错误及其解决方案:
原因:-Werror 的作用是将全部的 warning 当成 error。 解决方案:全局搜索 -Werror 关键字,并注释该选项。
-
如果您现有的基于 Gradle 的构建使用Gradle Wrapper,您可以通过运行任务轻松升级wrapper,指定所需的 Gradle 版本:
$ ./gradlew wrapper --gradle-version=7.4.2 --distribution-type=bin
-
https://blog.csdn.net/qq_40367066/article/details/114935563