ECJ 是 Eclipse Compiler for Java 的縮寫,是 JavaTM 認可的 Java 編譯工具(類似 javac)。可以單獨下載使用。
下載地址: http://mirrors.ustc.edu.cn/eclipse/eclipse/downloads/drops4/R-4.11-201903070500/ecj-4.11.jar
(使用 ustc 的 mirror,然后在 eclipse 的下載里表中找到獨立的 ecj 包)
因為是 jar 包,所以,需要 jre 來執行,我寫了個小腳本:
@echo off java -jar "C:\Program Files (x86)\Java\jre1.8.0_211\lib\ecj-4.11.jar" -7 %*
如上所示,我把它拷貝到了 java 的標准 lib 里面放着了。
上面腳本的意思呢就是,使用 java 執行這個包,然后把所有的參數都傳進來。其中 -7 是指定編譯使用的 java 版本為 java7,目前 ecj 支持 java9 及以前的所有 java 版本。
為了能在 cmd 下直接使用,我把這個腳本命名為 ecj.cmd, 放在了: C:\Program Files (x86)\Common Files\Oracle\Java
PS:用同樣的方法來使用 openJDK 包里的 javac, 用起來也方便的
至於為什么不用 javac。。。java 的安裝體驗實在太差。。。不知道這算不算理由。。。
嘗試編譯下面的代碼:
public class Test{ public void method() { new testInterface() { public void info() { System.out.println("Hello"); } }.info(); } public static void main(String[] args) { Test test = new Test(); test.method(); } } interface testInterface { public void info(); }
沒毛病:
D:\Project\Java\inner>ecj Test.java D:\Project\Java\inner>java Test Hello
另外一些情況,我們的編譯可能用到額外的 jar 包:
ecj -cp surrounscm-api.jar GridPaneApplication.java
用上面指令編譯的 class,在執行時要這樣添加 classpath:
java -cp .;lib\surroundscm-api.jar GetMiniAutosar
也就是,不知道為啥,但是需要先添加當前目錄作為 classpath。
