001_源码阅读-Spring-Framework-5.3.10-SNAPSHOT-阅读环境搭建

本文基于linux环境进行SpringFramework框架搭建

一、依赖工具

git

1
sudo apt-get install git

jdk11

下载地址:https://www.oracle.com/java/technologies/javase-downloads.html

gradle

下载地址:https://services.gradle.org/distributions/

image-20210731100221916

选择all结尾的版本进行下载,all包含gradle所有源码,遇到问题可以进行修改,只需要运行,选择bin结尾的版本即可。

idea

下载地址:https://www.jetbrains.com/idea/

二、下载源码

源码地址:https://github.com/spring-projects/spring-framework

三、开始构建

设置idea的gradle配置

idea打开项目,进行idea的gradle的设置:File -> Settings:

image-20210731104629179

修改项目使用的gradle路径

打开工程目录下的gradle -> wrapper -> gradle-wrapper.properties文件,修改以下配置:

1
distributionUrl=file://本地gradle包路径

image-20210731105408565

gradle每次编译都会从官网下载,所以在它第一次完成下载之后,将distributionUrl设置为本地文件,就不会每次编译从官网下载。

修改项目使用的gradle编译配置

打开工程目录下的build.gradle文件,修改文件内容:

在文件头部增加以下内容:

image-20210731110259312

1
2
3
4
5
buildscript {
repositories {
maven { url "https://repo.spring.io/plugins-release" }
}
}

configure -> dependencyManagement -> repositories节点下增加镜像仓库地址:

image-20210731110642751

1
2
3
// 新增两个阿里云镜像仓库
maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
maven { url "https://maven.aliyun.com/nexus/content/repositories/jcenter"}
1
2
// 新增spring插件库
maven { url "https://maven.aliyun.com/repository/spring-plugin" }

build.gradle编译报错

image-20210731111511237

设置项目jdk版本

image-20210731111736360

image-20210731111856976

修改工程目录buildSrc -> build.gradle文件,增加阿里云镜像地址:

1
2
maven { url "https://maven.aliyun.com/nexus/content/groups/public/"}
maven { url "https://maven.aliyun.com/nexus/content/repositories/jcenter"}

image-20210731112528064

image-20210731112000302

项目设置完成后刷新gradle

image-20210731112818538

构建成功:

image-20210731113013673

四、编译源码

根据工程目录下import-into-idea.md文件指南进行项目编译

  1. 需要先对spring-core and spring-oxm 先进行编译
1
2
3
打开控制台,在项目根目录下对`spring-core`和`spring-oxm`执行编译
./gradlew :spring-oxm:compileTestJava
./gradlew :spring-core:compileTestJava

image-20210731113337857

  1. 对整个项目进行编译
  2. 第一次构建需要较长时间

image-20210731114125212

五、问题及解决方案

如遇到

H2DatabasePopulatorIntegrationTests > executesHugeScriptInReasonableTime() FAILED

修改spring-jdbc模块下的spring-jdbc.gradle文件,将optional替换为修改compile

1
2
//optional("com.h2database:h2")
compile("com.h2database:h2")

# 六、结束

可以自己新建module,在新建module下build.gradle文件中增加spring依赖,开启源码阅读之旅。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
plugins {
id 'java'
}

group 'org.springframework'
version '5.3.10-SNAPSHOT'

repositories {
mavenCentral()
}

dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
}

test {
useJUnitPlatform()
}