本文,我们在原来文章 《JDK 源码解析 —— 调试环境搭建》 的基础上,从 JDK11 调整成 JDK13 ,并使用 Git 取代 Mercurial 获取 OpenJDK 的源码。 在艿艿写完 《精尽 JDK 源码解析 —— 调试环境搭建(二)进阶》 之后,艿艿突然发现,从 Git 克隆的是 OpenJDK14 的 EA(Early Access 抢 先体验版)。暂时不就纠正,反正胖友要记得,整个系列是基于 OpenJDK14 的 EA 写的。
JDK 源码的调试环境,实际上暂时没有特别好的方案。
因为,我们程序运行以来 JDK ,但是我们如果在 JDK 上增加源码相关的注释,就会导致代码行数的错乱。所以,艿艿目前的想法是,如下两个步骤:
- 1、从官方的 Mercurial 获取 OpenJDK 源码,在上面添加源码注释。> 获取 OpenJDK 源码的方式,一共有三种
- 1、从 http://jdk.java.net/ 网站上,直接下载源码。
- 2、使用 Mercurial ,从 http://hg.openjdk.java.net/jdk/ 克隆对应版本的源码。例如说,我们在 《JDK 源码解析 —— 调试环境搭建》 文章中,就是这么干的。
- 3、使用 Git ,从 https://github.com/openjdk/jdk克隆对应版本的源码。该仓库就是 http://hg.openjdk.java.net/jdk/ 的镜像,方便我们使用我们所熟悉的 Git 而不是 Mercurial 。在本文,我们就会从该仓库克隆。
- 2、自己搭建一个项目,使用 JDK13 ,然后进行调试。
从官方仓库 https://github.com/openjdk/jdk Fork 出属于自己的仓库。为什么要 Fork ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。😈
使用 IntelliJ IDEA 从 Fork 出来的仓库拉取代码。因为 JDK 的源码比较大,所以拉取会花费漫长时间,耐心等待下。
如果拉取比较慢,也可以考虑使用 https://gitee.com/zhijiantianya/jdk 地址。这个是艿艿使用 Gitee 对 https://github.com/openjdk/jdk 做的镜像。毕竟,Github 对国内的网络,不是非常友好。
拉取完成后,我们可以搜索想看的类。例如说,HashMap 如下图所示:
HashMap
如此,我们就可以愉快的在其上添加源码注释。
可能胖友导入在 IDEA 看到的项目结构比较奇怪。可以先 IDEA 关闭 OpenJDK 项目,然后删除项目本地根目录下面 IDEA 相关的配置,最后再使用 IDEA 打开 OpenJDK 项目。
① 下载 JDK
从 https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html 上,下载 Oracle JDK13 。
虽然说,我们在 「1. 获取 OpenJDK 源码」 中下载的是 OpenJDK 的源码,但是我们使用 Oracle JDK13 作为调试环境,也是没啥问题的。因为,Oracle JDK 和 OpenJDK 绝大部分源码是相同的。
如果想要纯粹以 OpenJDK 作为调试环境,可以参考 《Mac 上的 JDK 多版本管理》 文章,使用 brew 安装对应版本的 OpenJDK 。
② 搭建项目
这个比较简单,就不重复赘述了。需要注意的是,设置 Project SDK 要是 Oracle JDK13 噢。
还有一个注意点,IDEA 需要升级到 2019.2 或以上版本,因为 2019.2 才支持 JDK13 。
友情提示:当然,胖友如果自己有精力,可以将克隆的 OpenJDK13 编译出来,作为项目使用的 Project SDK 。
③ 调试
直接调试,这个无需多说列。
例如说,艿艿就在 https://github.com/YunaiV/openjdk 项目下,创建了一个叫 yunai
的 Maven 项目,各种创建测试类,各种调试。
2019 年的下半年,艿艿准备写写大家比较常用的 JDK 类的源码解析,希望对胖友有一些帮助。共勉,2019 ,加油!
当然,可能会有胖友会有疑惑,目前 JDK8 版本才是主流,而艿艿为什么使用 JDK13 呢?虽然说,Oracle JDK8 某个版本(具体不太记得了)之后,需要更新,但是我们最终还是会不断更新版本。Java 的强大,不是因为 Oracle ,而是完善的整个社区体系。
http://svip.iocoder.cn/JDK/build-debugging-environment/