我的前几篇博客写了如何编译OpenJDKRobin Lan:Ubuntu 18.04下编译OpenJDK14zhuanlan.zhihu.com
其实我最终目的是想研究一下OpenJDK里的Java编译功能和JIT编译功能。我们就先来研究一下Java编译器的实现。
还是那句话,要想深入了解代码的功能,除了能阅读代码,最好能运行起来,单步调试跟踪。为了实现这个目的我从OpenJDK14里把jdk.compiler的代码提取出来,整理成一个maven能独立编译运行的工程,只要用Intellij或是Eclipse就能运行起来,实现单步跟踪调试。我以后的学习都是在Intellij上,所以Eclipse没有相关的教程,如果有兴趣可以自行设置。
1、 首先你得有一个OpenJdk14的环境,可以在这里下载AdoptOpenJDK,Windows/Linux/Mac都可以,然后设置好环境变量。
2、安装Intellij IDEA,社区版本就行了。土豪请随便。
3、去下载我准备好的OpenJDK jdk.compiler的代码,从这里下载 github.
以上三步完成了,就可以直接打开项目了。
然后再java14compiler上点右键,选择Open Module Settings做把下设置:
Project --> Project SDK为你下载的AdoptOpenJDK 14
---> Project language level: 14(Preview)
Module --> Module SDK为你下载的AdoptOpenJDK 14
然后就可以编译,如果设置正确编译应该没有什么问题。
然后打开菜单Run --> Edit Configurations... 点左上角的+号,选择 Application会打开新设置页面,输入你想要的名字,设置项如下,然后保存。
Main class: com.lan.tools.javac.Main
Program arguments: icu/mianshi/openjdk/compiler/HelloWorld.java icu/mianshi/openjdk/compiler/MyMath.java
Working directory: 你的保存这个项目的路径+test 我的是(D:\github\java14compiler\test)
还是上传一张图吧:
然后到 src/main/java/com/lan/tools/javac下面把Main.java打开,在第43行设置上断点,然后点左侧的小绿三角形,然后选择 Debug 'Main.main()'就可以开始调试了,你可以单步跟踪进去,我们就先不跟踪了,按F9直接让它过了。它会在 java14compiler/test/icu/mianshi/openjdk/compiler/目录下生成两个class文件:HelloWorld.class, MyMath.class都是由它对应的源码生成的。
我们来验证一下生成的class文件对不对。打开你的终端 cd到 java14compiler/test目录下,然后执行 java icu.mianshi.openjdk.compiler.HelloWorld,如题出现 10+2=12就对了。
这里要注意你的java必须是14版本,否则会提示版本过低的问题。
好了,环境准备工作就到这里了。