序言
讲Javac之前我想和大家聊一聊Java到底是个什么东西,这个全世界最流行的语言,它所构成的基础是什么?其实对于Java整个技术体系来说,所做的事无非是这几步,将Java文件转为class文件,再将class文件放入jvm中执行,虽然限制于平台,编译器,虚拟机的实现,相同的代码,最终生成的class文件,执行的流程可能完全不同,但是整个流程基本上是相似的。
我在之前的文章曾经详细的讲述了class文件是如何被jvm虚拟机所识别,检验,最终执行,但是对于class文件是如何生成的,也就是我们刚刚接触Java时所输入的Javac指令到底做了什么工作,我觉得还是有必要和大家分享一下。
因为Javac属于较为偏门的知识,网上的博客都写的很烂,基本上十篇会有九篇是其他博客拼接起来的,甚至有些连拼接都不愿意,直接复制黏贴,网上对于怎么看Javac教程基本上流程如下,首先,编译一个属于自己的jdk,然后把Javac对应的文件放入一个新建的Java工程项目中,其中的坑有多大,实际执行起来有多麻烦我就不多说了,我想说的是,其实如果仅仅只是需要查看,Javac的源码,根本无需如此大动干戈。
首先,我们需要搞清楚Javac命令的本质是什么,稍有计算机常识的人都都知道,在win平台下,这个指令等同于运行Javac.exe,让我们找到Javac

很显然,这么小的文件肯定不足以完成将Java转换为class的工作,我们将其拖出来,运行

添加相应的库文件

还原jdk中的路径位置,依次排查,最终确定javac.exe最终调用lib/tools.jar,使用脚本反复执行Javac.exe,


确认最终调用Java执行,即,使用tools.jar,查看tools.jar

tools.jar\sun\tools\javac中发现Javac对应的文件,将tools.jar放至idea中,由于src中并没有关于tools中的内容,这部分内容被放置在openjdk源码中

点击下载zip,导入tools.jar和源码到idea

随意点击一个文件

成功查看源码
注意 ,本教程只限于jdk8,8之后的jdk版本把tools移除了,Javac中的源代码可以在src.zip\jdk.compiler\com\sun\tools\javac中找到,

不过无论是jdk8还是jdk8以上,均可以使用
import com.sun.tools.javac.Main;
public class Test{
public static void main(String[] args) throws Exception {
Main m=new Main();
m.main(args);
}
}
执行javac,区别是jdk8之前需要导入tools.jar和对于的源文件,8之后只需要导入src.zip即可,执行效果

本文介绍了如何查看Javac的源码,针对 JDK 8 版本,详细阐述了从理解Javac命令本质到定位Javac.exe、tools.jar,再到导入源码到IDEA进行查看的全过程。特别提示,JDK 8之后的版本Javac源码位置有所变化,但查看方法类似。
737

被折叠的 条评论
为什么被折叠?



