spring6.0.x源码调试环境搭建

发布时间 2023-04-09 00:49:55作者: 毛毛雨1997

效果

搭建一个spring源码调试环境,创建一个spring-demo模块,写一些测试代码。

gh

给源码添加注释。

gh

给源码打包

gh

ubantu环境下搭建spring6.0.x源码环境

步骤

源码网址

Spring Framework

gh

下载代码

fork到自己的GitHub仓库,然后拉代码

git clone https://github.com/GitHubXiaoSiyuan/spring-framework-6.0.7.git

代码拉到 ~/files/projects/kernel_projects/fr
amework 目录下

gh

gradle下载与配置

下载

https://gradle.org/releases/

gradle/wrapper/gradle-wrapper.properties

找到版本为7.6的 gradle

distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip

gh

找到 7.6 的版本,点击下载(注:点击之后,用迅雷下载很快)

下载链接如下(复制即可触发迅雷下载)

https://downloads.gradle-dn.com/distributions/gradle-7.6-all.zip

gh

解压

sudo unzip gradle-7.6-all.zip

gh

gh

配置环境变量

# 设置环境变量
sudo vi /etc/profile

# 在底部加入这一段
# gradle
export GRADLE_HOME=/home/xiaosy/files/development/gradle-7.6 
export PATH=$NODE_HOME/bin:$PATH

# 变量生效
source /etc/profile

# 设置读写权限
sudo chmod -R 777 /home/xiaosy/files/development/gradle-7.6/bin

# 查看版本
# 不知道为什么直接 gradle -v 没用
/home/xiaosy/files/development/gradle-7.6/bin/gradle -v

gh

gh

idea配置

配置gradle编译

Tools -> gradle

# 路径
压缩包放在 /gradle/wrapper/ 目录下

路径配置
/home/xiaosy/files/development/gradle-7.6


gh

gh

下载二进制版本

https://services.gradle.org/distributions/gradle-7.6-bin.zip

gh

jdk

设置为 jdk17

# 设置环境变量
sudo vi /etc/profile


# 修改jdk路径
# jdk
export JAVA_HOME=/home/xiaosy/files/development/jdk17/jdk-17.0.6


# 变量生效
source /etc/profile

gh

gradle-wrapper.properties修改

打开 gradle/wrapper/gradle-wrapper.properties

将distributionUrld地址替换为本地gradle下载

# 修改后
distributionUrl=/home/xiaosy/files/development/gradle-7.6-all.zip

gh

build.gradle文件修改

替换国内镜像

	repositories {
		maven { url "https://maven.aliyun.com/repository/central" }
		mavenCentral()
		maven {
			url "https://repo.spring.io/milestone"
			content {
				// Netty 5 optional support
				includeGroup 'io.projectreactor.netty'
			}
		}
		maven { url "https://repo.spring.io/libs-spring-framework-build" }
		if (version.contains('-')) {
			maven { url "https://repo.spring.io/milestone" }
		}
		if (version.endsWith('-SNAPSHOT')) {
			maven { url "https://repo.spring.io/snapshot" }
		}
	}

gh

setting.gradle文件修改

替换国内镜像

	repositories {
		maven {
			url 'https://maven.aliyun.com/repository/public'
		}
		maven {
			url "https://maven.aliyun.com/repository/google"
		}
		maven { url "https://maven.aliyun.com/repository/gradle-plugin/" }

		gradlePluginPortal()
		google()
		mavenCentral()
	}

gh

注释

//注释掉不然会A build scan was not published as you have not authenticated with server 'ge.spring.io'.

gh

用idea集成的gradlereload

gh

编译成功

gh

新建module

gh

在新项目的build.gradle下添加对spring模块的依赖,这里我先添加了spring-beans 和spring-core的依赖。

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

gh

在新项目的src/main/resource下添加spring-config.xml文件

<?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">
	<!--把对象的创建交给spring来管理-->
	<bean id="person" class="com.wts.Person">
		<property name="id" value="1"></property>
		<property name="name" value="zhangsan"></property>
	</bean>
</beans>


创建测试bean和启动类

public class Person {

	private int id;

	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}


public class Test {

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Person person = (Person) ac.getBean("person");
		System.out.println(person);
	}
}

debug

1. 更改压缩包位置

The specified Gradle distribution 'file:/home/xiaosy/files/projects/kernel_projects/framework/spring-framework-6.0.7/gradle/wrapper/home/xiaosy/files/development/gradle-7.6-all.zip' does not exist.

gh

2

设置文件读写权限

Could not create parent directory for lock file /gradle-7.6/wrapper/dists/gradle-7.6-all/cmg34oui1skho6ogkheeq1oxe/gradle-7.6-all.zip.lck

sudo chmod -R 777 ~/files/projects/kernel_projects/framework/spring-framework-6.0.7

gh

3

Cause: zip file is empty

gh

4

gh

解决:

gradle.properties

org.gradle.java.home=/home/xiaosy/files/development/jdk17/jdk-17.0.6

俩 gradle.properties 都设置了

gh

注释掉这段代码,然后重写就不报错了,纯粹的编译问题

gh

参考

  1. Spring 6 源码编译和高效阅读源码技巧分享备份

参考

  1. Spring6.0.0源码阅读环境搭建-gradle构建编译备份
  2. Spring源码深度解析:一、Spring整体架构和源码环境搭建备份