须知少时凌云志,曾许人间第一流。


IDEA导入JDK8源码学习(报错解决方案)_JDK8


首先将jdk里的src源码解压,然后把src里面的全部东西粘到自己项目src目录里。


IDEA导入JDK8源码学习(报错解决方案)_IDEA_02

IDEA导入JDK8源码学习(报错解决方案)_JDK8_03

问题1:系统资源不足


IDEA导入JDK8源码学习(报错解决方案)_IDEA_04

解决方案:

  • 通过提示可以看出导致这个错误出现的原因是内存不够。解决办法当然是加大内存。

  • 点击File–>Settings–>Build,Execution,Deployment–>Compiler,将Build process heap size(Mbytes)选项加大,默认值是700,笔者这里调至1200:

问题2:com.sun.tools.javac.api不存在


IDEA导入JDK8源码学习(报错解决方案)_IDEA_05

解决方案:

  • 这是缺少tools的jar包所导致的。

  • 点击File–>Project Structure–>Libraries

IDEA导入JDK8源码学习(报错解决方案)_JDK8_06

IDEA导入JDK8源码学习(报错解决方案)_IDEA_07

IDEA导入JDK8源码学习(报错解决方案)_JDK8_08

问题3: 找不到符号UNIXToolkit、FontConfigManager

IDEA导入JDK8源码学习(报错解决方案)_IDEA_09

解决方案

  • 这是因为在Windows平台下缺少了两个java类文件所导致的。

  • 这两个类文件可在OpenJDK http://openjdk.java.net/网站上找到。

IDEA导入JDK8源码学习(报错解决方案)_IDEA_10

注意这里选择自己相应的JDK版本:
IDEA导入JDK8源码学习(报错解决方案)_JDK8_11

IDEA导入JDK8源码学习(报错解决方案)_IDEA_12

IDEA导入JDK8源码学习(报错解决方案)_JDK8_13
IDEA导入JDK8源码学习(报错解决方案)_IDEA_14
IDEA导入JDK8源码学习(报错解决方案)_JDK8_15

IDEA导入JDK8源码学习(报错解决方案)_IDEA_16

IDEA导入JDK8源码学习(报错解决方案)_JDK8_17

IDEA导入JDK8源码学习(报错解决方案)_JDK8_18

IDEA导入JDK8源码学习(报错解决方案)_JDK8_19

IDEA导入JDK8源码学习(报错解决方案)_JDK8_20

找到这两个类文件的位置后,将它们复制进项目如下图所示的位置中。

IDEA导入JDK8源码学习(报错解决方案)_JDK8_21

此时再调试或者运行测试用例的时候,可以看到已经成功运行。(debug :F7向下执行)

IDEA导入JDK8源码学习(报错解决方案)_JDK8_22

完善项目设置

1、允许调试进入

此时如果我们打断点进行单步调试的话,可以发现点击Step Into无法进入源码内部,因为JDK源码的受保护的,无法进入,但是点击Force Step Into是可以进入源码内部的。如果想要直接按F7(即点击Step Into)进入源码内部的话,需要做如下设置:

  • 点击File–>Settings–>Build,Execution,Deployment–>Debugger–>Stepping,取消勾选Do not step into the classes。

IDEA导入JDK8源码学习(报错解决方案)_IDEA_23

2、编辑源码文件

如果我们想要对源码文件做记录或者注释时,会发现源码文件是只读的,无法编辑。因为此时项目关联的源码文件还不是刚才复制进项目的文件,而是jdk安装目录下的源码文件。重新将项目关联的源码文件设置成该项目下的源码文件即可。

  • 点击File–>Project Structure–>SDKs

IDEA导入JDK8源码学习(报错解决方案)_JDK8_24

  • 这里将原先的jdk安装目录下关联的源码路径删除,添加刚才拷贝至项目目录下的源码路径。

IDEA导入JDK8源码学习(报错解决方案)_JDK8_25

  • 这个时候,再进行调试进入源码内部的时候,可以发现,文件上面的小锁标志已经不见了,源码文件也可以进行注释记录了。

IDEA导入JDK8源码学习(报错解决方案)_IDEA_26

IDEA导入JDK8源码学习(报错解决方案)_IDEA_27

总结


至此,关于JDK源码阅读项目的搭建已经完成。平时学习源码的时候,不能只是光看,一定要动手调试,在调试的过程中阅读源码,做记录,写注释,缺一不可。将输入转化为输出,坚持下去。