在研究 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 源码的大门。