最近因为工作原因,需要给OpenJDK社区提PR(pull merge)刷kpi。
我也是新手,没有给开源社区社区提交过贡献,所以研究了一下流程,在这里记录一下。
主要参考了Koichi Sakata(阪田浩一)在JCConf Taiwan(台湾最大的Java研讨会)2021年的演讲。
目录
前言
贡献方式
提交补丁的流程
如何找到可以修复的bug?方案一
如何构建JDK?
例子
如何找到可以修复的bug?方案二
提交前自测
提交patch
邮件内容
Sign OCA
提交PR
参考
当我们打算为OpenJDK社区提交贡献的时候,先不用考虑技术细节。
我们自己的目标是:
1. 获取知识。
2. 提高技能。
3. 提高知名度。
4. 交朋友。
5. 证明对Java的热爱。等等。
不同的贡献方式:
1. 提交补丁(patch)。
2. 审查代码。
3. 分享想法。
4. 参与讨论。
5. 做演讲。
6. 写博客文章。等等。
1. 查找Bug。
2. 修复Bug。
3. 提交补丁。
4. 收到评论(Receive reviews)。
5. 发表评论(Address comments)。
6. patch被合并
在我们的日常使用中,OpenJDK好像没有什么错误。
如何找到可以修复的部分呢?
我们可以使用新版本的库来构建OpenJDK!包括GCC,Clang,etc。
如果用新版本的库出现了warning或者error,我们就可以尝试修复它了!
在Ubuntu2004上编译JDK8和11的步骤,参考我之前的博客,有问题欢迎评论区留言。
Ubuntu2004的OpenJDK11源码调试-CSDN博客
Linux 编译open-jdk8流程-CSDN博客
作者用gcc-10编译JDK16,遇到了几个可以修复的编译问题。
在Java Bug System(JBS)上寻找issuse。
JBS页面如下,可以筛选自己感兴趣的issuse,像我这里查找的是fixed的wayland相关issuse。
JBS对没有账号的访客是可读的,无法提交issuse和参与讨论。
账号需要Author权限才能得到,Author是社区的一种角色。
成为Author的前提是:给项目至少贡献2个补丁。
社区角色相关的内容,知乎已经有大神翻译了,链接在这里。
提交改动之前需要自测相关模块,这里推荐的测试工具是jtreg和gtest(Google Test)。
以下是作者给出的例子,这个工具我不熟悉,不展开了。
# jtreg的例子
$ make run-test TEST=serviceability/sa/TestJhsdbJstackMixed.java
$ cat./jdk/build/linux-x86_64-server-fastdebug/test-
results/jtreg_test_hotspot_jtreg_serviceability_sa_TestJhsdbJstackMixed_java/text/summary.txt serviceability/sa/TestJhsdbJstackMixed.java Passed.Execution successful
# gtest的例子
$./build/linux-x86_64-server-fastdebug/hotspot/variant-server/libjvm/gtest/gtestLauncher-jdk:./build/linux- x86_64-server-fastdebug/jdk--gtest_filter=LogConfigurationTest.*
Note:Google Test filter =LogConfigurationTest.*
[====]Running 15 tests from 1 test case.
[-------] Global test environment set-up.
[-------] 15 tests from LogConfigurationTest
[RUN] LogConfiguration Test.describe_vm
[OK ] LogConfiguration Test.describe_vm(1ms)
(omitted)
[====] 15 tests from 1 test case ran. (659 ms total)
[PASSED ] 15 tests.
不要在github上创建 pull request。
所有的issuse都需要提交给JBS,在pull request的标题中应该有JBS的issuse的编号。
PR(pull request)应该先被发送到相关的邮件列表,邮件列表在这里。
一封完整的邮件包括:
mail.openjdk.org Mailing Lists这一步可能需要把patch发出去,不要害怕,社区的成员往往礼貌而友好!
Oracle Contributor Agreement
有类似的字样说明成功。
在确认JBS有issuse和OCA申请成功后,就可以正提交PR啦~
最新版本的改动可以提交到:GitHub - openjdk/jdk: JDK main-line development https://openjdk.org/projects/jdk
非最新版本的提交到对应的github仓库里,比如:
GitHub - openjdk/jdk8u-dev: https://wiki.openjdk.org/display/jdk8u
GitHub - openjdk/jdk11u-dev: https://openjdk.org/projects/jdk-updates
PR提交之后需要Reviewer的审查,通过后pr会由sponsor合并。
进行到这一步我们就成功提交了一个pr!
https://www.youtube.com/watch?v=hGciAsYRZPc&ab_channel=JCConfTaiwan