如何参与开源项目?——以Spring Framework为例
本文以我是如何成为Spring Framework的贡献者为例,你可以在My Commits看见我的提交。
1. 为什么要参与开源项目?
参与开源项目有以下几个好处:
- 熟悉框架代码,提高设计思维,抽象能力及编码能力。
- 熟悉知名开源项目的维护流程,与技术大咖对话。
- 成为知名开源项目的贡献者,提高个人知名度。
- 开源精神,为开源社区做贡献。
2. 如何为项目做贡献?
2.1. 项目环境搭建
2.1.1. 前置准备
注册Github账号,打开Spring Framework代码仓库,点击Fork,将项目源码Fork到自己的仓库中。

在正式贡献前,需要仔细阅读开源项目的贡献说明文档,即CONTRIBUTING.md,一般会说明以下内容:
- 需要遵循的代码风格和代码规范。
- 贡献代码前需要签订的协议,Spring采用的是DCO[1]贡献协议。
- 提交message的格式等。
什么是DCO协议?
简而言之,DCO协议要求提交的message如下格式:
A commit message Closes gh-123 Signed-off-by: Rob Winch <rob@example.org>
2.1.2. 拉取代码
在Github上点击Sync fork
,将自己仓库的main
分支同Spring仓库的main
分支保持一致。

使用git命令将代码clone到本地。
git clone git@github.com:remeio/spring-framework.git
使用git命令更新代码。
git pull origin main
创建并切换到开发分支,如add_comment_for_order
,refactor_header_name
,fix_gh_36265
。
git checkout -b add_comment_for_order
需要注意的是,
main
分支用来和开源项目仓库的main
分支保持同步,所以不能在main
分支上做修改。建议将main
分支设置为受保护的分支。
2.1.3. 构建项目
安装构建项目所需的JDK版本,这里我使用的是从IDEA中下载的JDK17(Amazon Corretto version 17.0.7)。

Spring Framework使用gradle作为依赖管理工具,设置国内镜像加速:
# spring\gradle\wrapper\gradle-wrapper.properties
- distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+ distributionUrl=file\:///D:/program/gradle/gradle-8.11.1-bin.zip
// spring\build.gradle
// Line 1:
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/spring/' }
mavenLocal()
mavenCentral()
}
}
// spring\settings.gradle
// Line 1:
pluginManagement {
repositories {
maven {
url 'https://maven.aliyun.com/repository/gradle-plugin'
}
gradlePluginPortal()
}
}
如果使用的JDK是Amazon Corretto version 17.0.7
,需要修改org.springframework.build.JavaConventions#applyToolchainConventions
方法:

最后使用gradle编译构建项目。
2.1.4. 运行单元测试
选择一个单元测试(如org.springframework.util.AssertTests
),进行运行,以验证项目构建成功。

2.2. 修改代码
2.2.1. 贡献来源
我们可以通过以下来源找到可以贡献的方向:
- 查看Spring Framework仓库中Issue。
- 阅读源码,并进行Code Review,以找到潜在的问题或可以重构的地方。
2.2.2. 修改代码
修改代码,运行代码格式检查脚本,编写并运行对应的单元测试。

2.2.3. 提交代码
提交变更,提交message如下:
Document order values for TestExecutionListener implementations
Closes gh-34265
Signed-off-by: Mengqi Xu <2663479778@qq.com>
推送代码到远程仓库。
git push origin add_comment_for_order
2.3. 提交PR
2.3.1. 创建PR
在Github上,为自己的提交创建一个PR[2](Create pull request)。

2.3.2. 等待反馈和合并
等待Spring Framework的Member进行代码评审及反馈,顺利的话,代码将会被合并,便可以成为贡献者了。

3. 一些思考
3.1. 技术大咖也会遗漏?
在阅读Spring Framework的事务相关的源码的时候,发现源码中注释写的不太正确(遗漏了一种情况),便提交了一个PR[3],
得到了Spring作者Juergen Hoeller的回复:

其实技术大咖也会遗漏或写出bug,这个是不可避免的,所以单元测试和Code Review才显得格外重要。