1. 絮絮叨叨
- 学习JCTree时发现,IDEA中展示的是反编译后的代码,并非像其他的JDK类一样展示.java文件
- 而之前学习Java容器类时,有源码注释的加持,学习起来那叫一个如虎添翼 😘
- 因此,还是希望IDEA中能展示tools.jar的源码,帮助自己学习JCTree
2. 弯弯绕绕,都失败
2.1 模仿rt.jar源码阅读
- 网上查找时,找到了一篇文章:idea查看 rt.jar源码
- 介绍了如何下载jdk源码,并将源码与IDEA绑定,从而能成功查看rt.jar中类的源码
- 自己也按照文章中介绍的方法,下载了好几分钟的、几十MB的zip文件,并导入到IDEA中
- 最后,发现JCTree类还是不能以JCTree.java的形式在IDEA中展示
- 后来,根据JCTree位于
com.sun.tools.javac.tree
包中,仔细看了一下:hg.openjdk.java.net网站的src/share/classes/sun/tools/javac目录下,好像都没有tree目录 - 没有JCTree的源码无法正常导入IDEA,那就能说得过去了
2.2 maven下载source的方法
-
后来,IDEA中有如下提示,也尝试过Choose Source,但是毫无用处
-
网上搜索对应的关键字,找到了博客IntelliJ IDEA 2020.3 :decompiled.class file bytecode version:52.0(java 8)解决问题
-
在自己的maven项目中,加上了tools.jar的引用,然后通过右侧的Maven选项卡进行tools.jar的源码下载
<dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.8</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency>
-
最后,仍然没有解决问题
3. 终极解决办法
- 既然hg.openjdk.java.net网站能下载到源码,那是不是也能在其他的网站下载到tools.jar的源码呢?
- 搜索关键字
jctree.java jdk 8
,最后搜索结果的第一条就指向了hg.openjdk.java.net网站的另一个jdk源码目录
- 点击进入后,层层网上递推,进入了确定了源码的根目录:/ jdk8 / langtools
- 按照idea查看 rt.jar源码博客中讲述的方法,将源代码绑定到IDEA中
- 发现IDEA中的JCTree.class自动变成了JCTree.java,开心得想当场转圈圈~ 💃
- 毕竟很简单的一个问题,结果都这么曲折 😭