前言

此教程已在进行多次实操,每次都能构建成功,本人在教程中给出截图比较多,应该还比较清晰明了;

愿想要学习spring源码的小伙伴们都能构建成功;

从构建开始到成功一共有9个步骤(1-9);

新建java项目并引用新构建的spring框架,此处用了3个步骤(10-12);

第一步: 下载源码

Github链接:https://github.com/spring-projects/spring-framework

github spring源码 spring源码教程_spring

第二步: 下载gradle包

gradle 下载链接:https://gradle.org/releases/

我这里下载的版本是gradle 4.9,下载下来也是一个zip包

github spring源码 spring源码教程_spring_02

第三步: 配置gradle环境变量,因为spring是由gradle编译的;注意win7和win10在配置环境变量这块会略有不同,本人用的是win7

github spring源码 spring源码教程_github spring源码_03


github spring源码 spring源码教程_github spring源码_04

检查一下是否配置成功,打开命令行输入gradle -v

github spring源码 spring源码教程_github spring源码_05

第四步: 修改gradle-wrapper配置文件该文件在\spring-framework-5.1.x\gradle\wrapper目录下

将distributionUrl的路径改成我们已经下载好的gradle-4.9-bin.zip包所在路径,我这里是D:\gradle-4.9-bin\gradle-4.9-bin.zip,配置该项的目的是避免其在运行的时候自动下载

注意:本地目录是以file开头

github spring源码 spring源码教程_github spring源码_06

第五步: 配置gradle的中央仓库,设置为国内的阿里云,修改文件build.gradle

github spring源码 spring源码教程_github spring源码_07

repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/libs-spring-framework-build" }
    maven { url "https://repo.spring.io/snapshot" }
    maven {url 'https://maven.aliyun.com/nexus/content/groups/public/'} 
    maven {url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
}

第六步: 编译,Windows环境下运行gradlew.bat脚本文件就行了,尽量不要双击运行,使用cmd命令行运行才是正确的打开方式,这样的话报错也能直接看到,从下图中可以看到编译成功

github spring源码 spring源码教程_github spring源码_08

github spring源码 spring源码教程_github spring源码_09

第七步: 预编译spring-oxm项目,运行gradlew :spring-oxm:compileTestJava即可,从下图中可以看出编译成功

github spring源码 spring源码教程_github spring源码_10

第八步: 设置IDEA

首先,新建一个gradle项目

github spring源码 spring源码教程_Apple_11


github spring源码 spring源码教程_github spring源码_12

设置IDEA,红框内的地址选择我们解压后gradle路径

github spring源码 spring源码教程_spring_13

第九步: 将我们已经编译好的spring源码导入到IDEA当中

github spring源码 spring源码教程_maven_14


github spring源码 spring源码教程_spring_15

导入源码后会自动开始构建,构建的时间有点久,从下图中可以看到构建成功,整个过程耗时15分钟(本人的小霸王已经在岗6年)

github spring源码 spring源码教程_github spring源码_16

由于gradle编译过程比较慢,我们这个时候可以将编译类型改成IDEA编译,如下图

github spring源码 spring源码教程_spring_17

至此整个spring源码的构建工作就完成了,接下来新建一个项目调试一下

第十步: 新建一个子gradle java项目

github spring源码 spring源码教程_Apple_18


github spring源码 spring源码教程_spring_19


github spring源码 spring源码教程_github spring源码_20

添加spring依赖compile(project(":spring-context"))到项目的build.gradle文件当中,添加完依赖之后点击右上角的刷新按钮,如下图

github spring源码 spring源码教程_github spring源码_21

如下图,项目就创建好了

github spring源码 spring源码教程_Apple_22

在项目中添加配置类AppConfig、测试类Apple和启动类SpringApplication

AppConfig类

package service;

import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class AppConfig {
}

Apple类

package service;

import org.springframework.stereotype.Component;

@Component
public class Apple {
}

SpringApplication类

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import service.AppConfig;
import service.Apple;

public class SpringApplication {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext  ac = new AnnotationConfigApplicationContext(AppConfig.class);
		System.out.println(Apple.class);
	}
}

第十一步: 运行子项目

点击开始运行,立即推,运行报错:(

从报错来看是我们Kotlin: Language version 1.1太低了,那就调高一点

github spring源码 spring源码教程_github spring源码_23


这里研究了一下也不太好确定是哪个子模块的Kotlin: Language version低,可以这么解决,打开springbuild.gradle文件,注意这里是spring的build.gradle文件,不是咱们新建项目中的build.gradle文件,分别将apiVersionlanguageVersion字段设置为1.4,之后,重启IDEA即可:

github spring源码 spring源码教程_github spring源码_24

再次点击开始运行,立即推,运行报错:(

从报错来看是我们没有加spring-instrument的依赖,那我们在项目的build.gradle文件中加上compile(project(":spring-instrument"))即可

github spring源码 spring源码教程_Apple_25

compile(project(":spring-instrument"))依赖,并点击右上方刷新按钮

github spring源码 spring源码教程_spring_26

再次点击开始运行,给它最后一次机会,立即推,运行成功:)

github spring源码 spring源码教程_maven_27

第十二步: 项目调试,在源码中打个断点试试,如下图,是我们想要的结果,哦了

github spring源码 spring源码教程_spring_28

总结

最近在学spring源码,刚开始构建的是看官方给出的文档一步一步进行,但着实是:(很难构建成功,至少我没有;

因此在构建spring这块走了些许弯路,好在卡的时间不是很长,最后总算让我给整出来了,然后你会发现成功一次,后面基本没啥问题了,今天是我第三次构建spring源码;

以上所描述的每一步以及每一张截图都是本人实际操作过的,写这篇文章主要希望大家能少走弯路,同时也是怕自己以后再想做这件事的时候,又会在这里耽误时间,最后愿所有喜欢java的小伙伴都能一次成功!