IDEA 搭建 JDK 源码工程简记

IDEA 搭建 JDK 源码工程简记
chify好记性不如烂笔头,记一篇 IDEA 中搭建 JDK 源码阅读工程的文章,防止下次踩坑,此次 JDK 版本为:1.8.0_261。
为什么要读 JDK 源码
阅读 JDK 源码是深入理解 Java 语言的最佳途径之一。通过源码可以了解:
HashMap、ConcurrentHashMap等集合类的底层数据结构与实现细节- JVM 与操作系统交互的机制,如
nio包中的内存映射文件 java.util.concurrent包中并发工具类的设计思想- 面试中常见的源码分析问题,提升技术深度
前置条件
开始搭建之前,确保已具备以下环境:
| 条件 | 说明 |
|---|---|
| JDK 版本 | 1.8.0_xxx(推荐与文章一致,避免兼容性问题) |
| IntelliJ IDEA | 2019.x 或更高版本 |
JDK 9+ 注意事项: JDK 9 引入了模块系统(
java.base、java.sql等模块),源码结构与 JDK 8 有较大差异,不再有统一的src.zip。如果使用 JDK 9+,可参考 OpenJDK 仓库直接 clone 对应版本的源码,并通过jigsaw模块化方式导入。本文方法主要适用于 JDK 8。
搭建流程总览
flowchart LR
A["创建 Maven 项目"] --> B["解压 src.zip 至 src/main/java"]
B --> C["配置 JDK 版本与编译参数"]
C --> D["解决编译报错"]
D --> E["配置 Debug Step Into"]
E --> F["搭建完成,可阅读源码"]
导入源码
创建新的 Maven 项目工程,在 JDK 安装目录,找到 src.zip 源码文件,将其内容解压至 Maven 项目 src/main/java 目录下
所遇问题
Error:java: Compilation failed: internal java compiler errorError: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 目录下的 tools.jar 配置进 Libraries 里。
UNIXToolkit、FontConfigManager类不存在
JDK 源码中无此类,可点击此处,按如下操作,找到所需类:
双击上图所示的类,复制其内容,在工程中相应包位置创建如上两个类,并将内容复制进去即可
- Debug 无法 Step into 到 JDK 源码,即使可以也是不可修改源码文件(不利于学习 JDK 源码)。
默认情况下,IDEA 设置 Debug 不让 Step into 到源码里,通过如下配置,将 Do not step into the classes 取消打钩即可。
修改完后即可 Step into 到源码,但此时并不可以修改其内容,按照如下方法重新修改源码路径即可:
以上,JDK 源码工程搭建完成!
评论
匿名评论隐私政策



















