原因也很简单,因为实际支撑调试运行的代码,并不是我们解压出来的那份源码,那个仅仅是做关联用,实际运行用到的,还是之前系统安装好的那个环境。
要想解决这个问题,那就只能使用自己修改过的代码来自行编译生成自己的,然后用到项目中去!
所以什么都憋说了,肝就完了!
环境准备
首选说在前面的是,编译前的软件版本关系极其重要,自己在踩坑时,所出现的各种奇奇怪怪的问题几乎都和这个有关,后来版本匹配之后,就非常顺利了。
我们来盘点和梳理一下编译一个JDK需要哪些环境和工具:
1、boot JDK
我们要想编译,首先自己本机必须提前已经安装有一个,官方称之为(或者称为)。
比如想编译,那本机必须最起码得有一个或者更新一点的版本;你想编译,那就要求本机必须装有或者。
所以鸡生蛋、蛋生鸡又来了…
2、Unix环境
编译需要环境的支持!
这一点在操作系统和操作系统上已经天然的保证了,而对于兄弟来说稍微麻烦一点,需要通过使用或者这种软件来模拟。
就像官方所说:在平台编译一般问题最少,容易成功;次之;上则需要稍微多花点精力,问题可能也多一些。
究其本质原因,还是因为毕竟不是一个内核的系统,毕竟很多软件的原始编译都离不开,所以相对肯定要麻烦一些。
3、编译器/编译工具链
底层源码(尤其虚拟机部分)很多都是写的,所以相关编译器也跑不掉。
一图胜千言,各平台上的编译器支持如下表所示,按平台选择即可:
而的源码已经提前托管到。
因此,比如下载,可直接一下就行,和一样:
同理,下载:
但是这种方式下载速度不是很快。
方式二:直接下载打包好的源码包
下载地址:
配置JDK 11完成:
明明系统里已经有编译器,但还是 这个错误。通过后来修改 文件,将相关的两行代码注释后就配置通过了
配置完成,接下来开始执行真正的编译动作了!
真正的编译动作
我们这里进行的是全量编译,直接在我们下载的源码根目录下执行如下命令即可:
这一步编译需要一点时间,耐心等待一下即可。编译过程如果有错误,会终止编译,如果能看到如下两个画面,那么则恭喜你,自己编译源码就已经通过了,可以搞一杯咖啡庆祝一下了。
JDK 8编译完成:
验证成果
源码编译完成之后肯定会产生和输出很多产物,这也是我们所迫不及待想看到的。
由于和的源码包组织结构并不一样,所以输出东西的内容和位置也有区别。我们一一来盘点一下。
1、JDK 8的编译输出
编译完成,目录下会生成一个目录,所有的编译成果均位于其中。
首先,编译出来的可执行程序可以在如下目录里找到:
进入该目录后,可以输入命令验证:
其中:
- :编译生成的JDK
- :编译生成的JRE
进入目录会发现,里面的内容和我们平时从 络上下载的成品内容一致。
其次,编译生成的成品套装,可以在目录
下找到,如图所示:
我们点开,选到选项,新添加上自己刚刚编译生成的JDK,并选为项目的JDK,看看是否能正常工作
点击确定之后,我们运行之:
这样方便我们对自己下载的进行阅读、调试、修改、以及在源码里随意做笔记和加注释。
举个最简单的例子,比如我们打开这个函数的底层源码:
为了使我们新加的代码行生效,我们必须要重新去JDK源码的根目录中再次执行 重新编译生成JDK方可生效:
多行注释的问题
记得之前搭建《JDK源码阅读环境》时,大家可能发现了一个问题:阅读源码嘛,给源代码做点注释或笔记很常见!但那时候有个问题就是做注释时不可改变代码的行结构(只能行尾注释,不能跨行注释),否则debug调试时会出现行 错位的问题。
原因很简单,因为我们虽然做了源代码目录的映射,但是实际支撑运行的还是预先安装好的那个JDK环境,并不是根据我们修改后的源码来重新编译构建的,所以看到这里,解决这个问题就很简单,就像上面一样自行编译一下即可。
实际在实验时,还有一个很典型的问题是,当添加了多行的中文注释后,再编译居然会 错!
比如,还是以上面例子中最简单的源码为例,我们添加几行中文注释:
顿时有点懵,毕竟仅仅是加了几行注释。对于我们来说,源码里写点多行的中文注释基本是刚需,然而编译竟会 错,这还能不能让人愉快的玩耍了… 当时后背有点发凉。
实不相瞒,就这个问题排查了一段时间,熬到了很晚。最终折腾了一番,通过如下这种方式解决了,顺便分享给小伙伴们,大家如果遇到了这个问题,可以参考着解决一下。
因为从控制台的 错可以很明显的看出,肯定是字符编码相关的问题导致的,而且都指向了这种编码方式。
于是将JDK的源码从根目录导入了Vs Code,然后全目录查找相关的内容,看看有没有什么端倪,结果发现
文件中有两处指定了相关的编码方式:
然后再次执行编译,编译顺利通过!

至此大功告成!
这样后面不管是阅读、调试还是定制源码都非常方便了。
后记:这篇文章在开源项目:https://github.com/hansonwang99/JavaCollection 中也已经收录了,包含自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
每天进步一点点
慢一点才能更快
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92081 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!