1.编译器以及Jdk版本
1.java环境:jdk1.8.0_231
2.IDEA版本:IntelliJ IDEA Community Edition 2019.3.3 x64
2.搭建过程
首先新建一个简单的java项目
点击next
继续next
输入project的名字,完成项目创建。
在src下创建两个包的source 和 test,source中用于存放jdk的源码,test中用于创建测试方法方便通过debug进入到jdk源码中,查看和学习jdk的源码
找到jdk的目录所在地,将src压缩包cp出来并且解压src目录
得到上图所示的目录,并且将src中的所有的目录都copy到项目中的source的目录下
ps:最好是直接在系统文件目录下copy,不要直接copy到编译器中的目录下。
点击project structure进入到下图中的界面
确定jdk版本,ps:我的版本是jdk1.8
接下来新添加一个jdk
修改SourcePath将src.zip删除,重新添加项目中的source
添加本地项目中的src中解压的文件夹所在地址
打开setting设置
取消勾选,主要是为了防止debug时无法读取到jdk源码问题,以及之后可以在源码中加入自己的理解以及注释。
修改size的大小,主要是为了防止build时系统资源不足(OutOfMemoryError)的问题出现
进行程序测试,利用debug测试能否进入到源码中
3.出现的问题
ps:如果出现OutOfMemoryError的问题就是前面修改build process heap size时未修改 或者 修改的值比较小的原因
a.出现程序包UNIXToolkit或者FontConfigManager不存在时
如下图所示:
打开OpenJDK的页面选择Mercurial
找到UNIXToolkit.java的所在地,因为我的jdk版本是jdk1.8.0_231,所以选择了jkd8u的项目
选择jdk8u对应的jdk
选择browse,进入目录
之后文件目录下的地址为/src/solaris/classes/sun/awt/,找到UNIXToolkit.java,如法炮制,找到FontConfigManager.java,其地址为/src/solaris/classes/sun/font/。
在项目中source目录下新建一个包sun.awt和sun.font将UNIXToolkit.java中的内容复制到sun.awt中的UNIXToolkit中,
将/src/solaris/classes/sun/font/FontConfigManager.java的内容复制到sun.font中的FontConfigManager中。
ps:不用修改原来代码中的包路径。
重启IDEA或者File->Invalidate Caches/Restart…,之后运行测试代码。
b.出现com.sun.tools.javac不存在
打开project structure,进入到此页面,添加lib,选择好本地的jdk目录下的lib文件。
选择完成后,应用并确定,之后重启IDEA或者File->Invalidate Caches/Restart…
最后就可以快乐的F7 F7 F7 F7 F7 F7...。
4.源码建议阅读顺序
1.假如有自己的规划,按自己规划来
2.假如没有规划,建议按照java.lang、java.util、java.io、java.nio、java.time、java.math、java.net的顺序来阅读源码