前言
跟JVM不同,javac是用java語言編寫的,所以想要調(diào)試javac源碼是非常簡單的。
之前寫過兩篇文章:
說明
需要說明的是,本文討論的是java版本是java8。
在java8中,官方j(luò)dk是沒有附帶javac源碼的。所以我們只能在openjdk中獲取javac源碼。
首先下載好openjdk8。
-
創(chuàng)建一個(gè)新的java工程。
image.png -
將javac的源碼導(dǎo)入到工程中,只導(dǎo)入:
com.sun.tools.javac.Main即可。
image.png
image.png 解決報(bào)錯(cuò)
報(bào)錯(cuò)的原因是我們沒有引入com.sun.tools.javac.Main的相關(guān)依賴,簡單說就是classpath中沒有tools.jar。
當(dāng)然如果我們把整個(gè)相關(guān)的源碼引入的話,tools.jar是不需要的。道理是很淺顯的,就是
com.sun.tools.javac.Main依賴滿足即可,怎么弄都可以。
引入tools.jar:
image.png
image.png
- 運(yùn)行
執(zhí)行main方法:
image.png
相當(dāng)于直接在命令行執(zhí)行javac,沒有任何參數(shù):
image.png
至此,javac的源碼就運(yùn)行起來了。
編譯HelloWorld
- 新建一個(gè)
HelloJavac.java
image.png
可以看到
HelloJavac目前是還沒有編譯的。
-
配置參數(shù):
image.png
這里我配置的參數(shù)是:
-d $ModuleFileDir$\target\classes $ModuleFileDir$\src\main\java\com\hello\HelloJavac.java讀者根據(jù)自己的路徑自行更改,宏是從圖紅框里選的。
-
編譯結(jié)果
image.png
更多
如果你想給源碼添加注釋,那除了導(dǎo)入com.sun.tools.javac.Main以外,可以導(dǎo)入更多的類。不過我建議是需要哪個(gè)導(dǎo)入哪個(gè),不用編譯這么多,不注釋的類就用tools.jar里的即可。









