好记性不如烂笔头,记一篇 IDEA 中搭建 JDK 源码阅读工程的文章,防止下次踩坑,此次 JDK 版本为:1.8.0_261
导入源码
创建新的 Maven 项目工程,在 JDK 安装目录,找到 src.zip 源码文件,将其内容解压至 Maven 项目 src/main/java 目录下


所遇问题
- Error:java: Compilation failed: internal java compiler error
- Error:java: OutOfMemoryError: insufficient memory
- 程序包 com.sun.tools.javac.api 不存在
- UNIXToolkit、FontConfigManager 类不存在
- Debug 无法 Step into 到 JDK 源码,即使可以也是不可修改源码文件(不利于学习 JDK 源码)。
问题解决方案
- Error:java: Compilation failed: internal java compiler error
编译时,IDEA JDK 版本未选对原因,配好如下3个选项。

- Error:java: OutOfMemoryError: insufficient memory
编译时,内存不够的原因,导致堆内存溢出,更改编译时的堆内存大小即可,IDEA 默认设置为 700M,这里改为 1024M 即可。

- 程序包 com.sun.tools.javac.api 不存在
缺失 tools.jar 包导致的问题,将 JDK lib 目录下的 tool.jar 配置进 Libraries 里。

- UNIXToolkit、FontConfigManager 类不存在
JDK 源码中无此类, 可点击此处 ,按如下操作,找到所需类:


双击上图所示的类,复制其内容,在工程中相应包位置创建如上两个类,并将内容复制进去即可

注:如不想折腾,可直接到此 GitHub 项目下获取相应类即可:GitHub项目地址
- Debug 无法 Step into 到 JDK 源码,即使可以也是不可修改源码文件(不利于学习 JDK 源码)。
默认情况下,IDEA 设置 Debug 不让 Step into 到源码里,通过如下配置,将 Do not step into the classes 取消打钩即可。
- Debug 无法 Step into 到 JDK 源码,即使可以也是不可修改源码文件(不利于学习 JDK 源码)。

修改完后即可 Step into 到源码,但此时并不可以修改其内容,按照如下方法重新修改源码路径即可:

以上,JDK源码工程搭建完成!
网友评论