在研究 Spring 源码的过程中,直接从 GitHub 下载源码后想要编译通过,常常会遇到各种构建失败或插件依赖问题。本文记录了我在编译 Spring Framework 5.3.37 时,所做的关键修改和配置,帮助你快速开启调试与源码阅读之路。

对应的视频讲解:动手构建 Spring Framework:本地源码编译详解_哔哩哔哩_bilibili

一、获取源码

你可以通过官网进入 GitHub 仓库:

官网地址:https://spring.io/

当前使用版本:Spring Framework 5.3.37

克隆源码仓库:

git clone https://github.com/spring-projects/spring-framework.git

cd spring-framework

git checkout v5.3.37

二、调整 Gradle 构建配置

Spring 的构建配置中包含了许多检查与发布逻辑,如果只是为了本地编译、调试,可以精简这些配置。

1. 修改 CompilerConventionsPlugin

路径:buildSrc/src/main/java/org/springframework/build/compile/CompilerConventionsPlugin.java

第 54 行,去除 -Werror 配置(用于强制编译警告为错误)。

2. 修改 spring-beans.gradle

删除第 25-27 行中关于 Werror 的相关配置。

3. 修改 spring-aspects.gradle

删除第 34-37 行中的 eclipse.project 配置。

4. 修改根目录的 build.gradle

删除以下内容:

插件声明部分:

3行 io.spring.nohttp

5行 org.jetbrains.dokka

8-9行 org.asciidoctor.jvm.convert org.asciidoctor.jvm.pdf

11行 com.github.ben-manes.versions

13 行 de.undercouch.download

检查工具相关配置:

310行 checkstyle

312-345行 两个apply、pluginManager.withPlugin("kotlin")、test、checkstyle等

365行 spring-javaformat-checkstyle

368-400行 ext.javadocLinks

411-443行 4个apply、nohttp、tasks.named、publishing

5. 修改 spring-module.gradle

删除第 7-53 行、61-102 行的插件与项目声明等内容。

6. 添加 gradle.properties

在项目根目录下创建或编辑 gradle.properties 文件,添加以下配置,用于关闭警告并兼容 JDK tools.jar:

org.gradle.warning.mode=none

tools.jar=${java.home}/../lib/tools.jar

三、添加 demo-debug 模块用于调试

你可以单独创建一个模块,便于打断点调试和学习框架内部逻辑。

1. 修改gradle文件名称为 demo-debug.gradle

然后使用下面内容替换之前的配置

dependencies {

api(project(":spring-core"))

optional(project(":spring-aop"))

optional(project(":spring-beans"))

optional(project(":spring-context"))

testImplementation platform('org.junit:junit-bom:5.9.1')

testImplementation 'org.junit.jupiter:junit-jupiter'

}

2. 中注册模块

build.gradle文件 18行 添加 || it.name == "demo-debug"

moduleProjects = subprojects.findAll { it.name.startsWith("spring-") || it.name == "demo-debug"}

在settings.gradle文件中,将 include 'demo-debug' 的位置上移,从最后一行移动至38行

settings.gradle文件include 'demo-debug'是IDEA自动生成的,如果没有生成,也可以手动添加

四、解决 Gradle 中文乱码

如果你在编译日志或测试输出中看到中文乱码,可以通过以下方式解决:

IDEA 设置 VM Options

进入菜单:Help → Edit Custom VM Options,添加如下内容:

-Dfile.encoding=UTF-8

然后重启 IDE 即可。

五、小结

通过以上调整,我们可以让 Spring Framework 在本地以最简配置编译通过,避免不必要的插件干扰,提升源码学习效率。

该方法适合用于:

源码调试与学习

编写简单的验证用例

IDE 打断点排查 Spring 行为逻辑

希望本文能帮你更轻松地打开 Spring 源码的大门。