Spring5.X 源码编译

说明

这篇文章参考自微信的一篇文章,文章的地址我放在后面,自己照着编译了 spring 源码成功率挺高的,由于 IDEA 版本的不同操作的步骤会有些不同,下面是我自己的编译过程。

准备工作

1、确保本机已经安装好了 git

2、jbk 对应版本为1.8

3、IDEA 版本 2019.3.3

4、Gradle 目前不需要安装,在编译的时候根据源码提示按照对应版本的Gradle即可

1、下载源码

拉取Spring源码,大家可以按照以下几步进行

  1. 在任意磁盘路径下新建一个文件夹,名称随便取,建议为SpringFrameWork
  2. 进入SpringFrameWork文件夹中,打开git命令行,输入以下两个命令之一:
1
2
3
4
5
# github 仓库地址
git clone https://github.com/spring-projects/spring-framework.git

# 国内gitee 仓库地址
git clone https://gitee.com/mirrors/Spring-Framework.git

国内朋友推荐使用 gitee clone spring源码,速度会快很多。

如果你是跟我一样直接拉取的代码,记得切换到5.2.x版本,在命令行中执行命令:

1
git checkout origin/5.2.x

2、添加阿里云镜像

在编译过程中,Spring会去自动下载一些依赖的包,默认使用的是官方的镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到build.gradle文件中的repositories节点下即可 ,

1
2
//添加阿里云镜像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

如下图所示:

img

3、预先编译spring-oxm模块

打开命令行窗口,并切换到源码所在文件夹,执行以下命令

1
gradlew :spring-oxm:compileTestJava

出现BUILD SUCCESS字样时说明构建成功,如下图所示:

image-20200718084134139

4、下载并安装对应的版本的Gradle

在 spring 源码的 gradle 目录下的 gradle-wrapper.properties 配置文件中,给出了当前项目依赖的 gradle 版本,具体文件位置如下:

spring-framework —> gradle —> wrapper —> gradle-wrapper.properties

spring-gradle

可以看到 spring-framework 5.2.X 版本源码,使用的 gradle 版本是 5.6.4

大家直接在这个网站上下载对应所需要的版本即可:https://gradle.org/releases/, 选择binary-only

安装好后记得配置Gradle的环境变量

  • 新增 GRADLE_HOME 环境变量,指向Gradle解压目录
  • 配置Path环境变量:新增 %GRADLE_HOME%\bin

之后测试是否安装成,在命令行中输入以下命令:gradle -v,查看是否正确输出了对应版本。

img

5、为安装好的Gradle配置国内镜像

进入Gradle安装目录,在init.d目录下新建一个init.gradle文件,并添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
def url = repo.url.toString()
if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
remove repo
}
}
maven {
url REPOSITORY_URL
}
}
}

如下图所示:

img

6、将代码导入到IDEA中

6.1、打开IDEA并选择导入项目

image-20200718220918088

6.2、选择导入一个Gradle项目

image-20200718220954555

6.3、配置导入的项目

导入项目后需要配置以下 Gradle,如下图所示:

image-20200718221114779

等待IDEA构建完项目,如果你之前已经按照我的方法配置了Gradle的国内镜像,这个过程不会太久,我们本机只用了10多分钟就构建完成了

构建完成后整个项目结构如下:

image-20200718221235341

7、构建整个项目

选择Build > Build Project

image-20200718221317399

可能出现的问题

AnnotationCacheAspect找不到符号

在这个过程中你可能会碰到如下错误:

img

这里简单处理方式如下:

将 spring-aspects 项目从整个 spring-framework 中移除

处理步骤如下图所示:

image-20200718201627234

image-20200718201739207

image-20200718202230111

8、添加测试模块**

8.1、右键工程名 —> new —> module

image-20200718221505601

8.2、选择Gradle及Java

image-20200718221535912

8.3、输入模块名称

image-20200718221621879

点击next —> Finish 完成测试模块的创建

最后,添加一些必要的依赖,修改创建好的模块中的build.gradle文件,添加如下三个依赖

1
2
3
compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")

如下图所示:

spring-custom

至此,我们就完成了整个Spring的编译,并且在创建了一个日后学习使用的模块!

参考文章:

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信