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

安装Gradle

因为Spring项目是用Gradle管理的,所以得先安装Gradle

访问 https://services.gradle.org/distributions/,下载所需要的二进制包

新建环境变量
GRADLE_HOME D:\Program Files\gradle-4.8
Path变量后加 ;%GRADLE_HOME%\bin(win10的话加一条记录不用;)

命令行输入

gradle -v

输出版本则表示安装正确

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

编译后导入IDEA

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

gradlew :spring-oxm:compileTestJava

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

导入的时候选中用本地下载好的gradle即可
Spring源码编译,导入IDEA,调试源码_第1张图片
然后等项目一直编译即可,我中途遇到一个问题定位到这3行代码上,就把它注释了

spring-beans.gradle

// compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava"
// compileKotlin.dependsOn(compileGroovy)
// compileKotlin.classpath += files(compileGroovy.destinationDir)

中间可能会遇到Skipped due to earlier error,我每次都是重新刷新下载
Spring源码编译,导入IDEA,调试源码_第2张图片
最后终于成功了

建立调试源码子模块

File->New->Module
Spring源码编译,导入IDEA,调试源码_第3张图片
GroupId->org.springframework
Version->5.0.17.BUILD-SNAPSHOT(从项目的gradle.properties文件可以知道)

  1. 删除建立module下的settings.gradle文件
  2. 在spring项目下的settings.gradle后加上如下一句 include “learning-spring”(我建的模块的名字)
  3. 在新建的模块中加入spring-context依赖,放一下我的build.gradle
plugins {
    id 'java'
}

group 'org.springframework'
version '5.0.17.BUILD-SNAPSHOT'

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.instrument.InstrumentationSavingAgent

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

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

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

GitHub地址

https://github.com/erlieStar/spring-framework

参考博客

[1]https://blog.csdn.net/bskfnvjtlyzmv867/article/details/81171802
[2]https://blog.csdn.net/Lin_xiaofeng/article/details/87923075

你可能感兴趣的:(Spring)