ECJ – Eclipse Compiler for Java

December 17, 2012

Nie wszyscy o tym wiedzą, ale Eclipse dostarcza i używa własnego kompilatora Javy – ECJ – zamiast standardowego javac. Kompilator umieszczony jest w plug-inie JDT Core i dostępny zarówno jako cześć Eclipse IDE for Java Developers jak i jako samodzielna aplikacja do wykorzystania zarówno z linii poleceń jak i programistycznego. Dlaczego ECJ jest tak interesujący? Jak pisze Wayner > It does wonderful things. My personal favourite thing about the Eclipse Java compiler is the fact that it will compile code that contains errors. That is, when you compile code that has errors in it, the compiler will flag those errors for you and then generate the .class file anyway. You can actually run and debug the code and, should the runtime actually run into your errors, it will then throw an exception.

Użycie z wiersza poleceń

Jest bardzo proste – po wpisaniu

java -jar /apps/ecj-4.2.1.jar

uzyskujemy niezbędną pomoc. Przkładowo, klasę MyApp.java można skompilować następujaco

java -jar /apps/ecj-4.2.1.jar MyApp.java

Znacznie ciekawsze jest

Wykorzystanie programistyczne

def ecjJar = '/apps/ecj-4.2.1.jar' as File
def loader = this.class.classLoader.rootLoader
loader.addURL(ecjJar.toURI().toURL())
 
 
def commandLine = '-classpath rt.jar MyApp.java'
 
org.eclipse.jdt.internal.compiler.batch.Main.compile(
    commandLine, 
    new PrintWriter(System.out), 
    new PrintWriter(System.err))

Oczywiście, jest to tylko wierzchołek góry lodowej możliwości ECJ który oferuje dużo więcej niż standardowy kompilator z JDK, np. wyszukiwanie w kodzie źródłowym.

eclipse / eclipse.jdt.core on GitHub