Eclipse JDT Compilier (ecj) 로 컴파일하기
1. Eclipse JDT Compilier (ecj) 다운로드
1.1. 이클립스 홈페이지에서 다운로드 받는 방법
1.1.1. 이클립스 홈페이지의 다운로드 페이지 접속
이클립스 홈페이지에 접속한 뒤에 Projects > Project Finder 에서 "Eclipse JDT" 로 검색한 후에, "Eclipse JDT (Java development tools)" 의 "Downloads" 링크로 이동한 후에, 다시 "Download Eclipse JDT (Java development tools)" 링크로 이동하면, The Eclipse Project Downloads 에 접속할 수 있다.
1.1.2. Java 11 을 위한 ecj-4.20.jar 다운로드
The Eclipse Project Downloads 에서 archive site 로 접속해서 Eclipse 4.20.0 Release Build: 4.20 페이지에 접속할 수 있다.
아래쪽으로 스크롤을 내리다가 JDT Core Batch Compiler 에서 ecj-4.20.jar 을 다운로드 한다.
Java 11 의 경우 최신버전(2024. 11. 14. 현재 4.33) 을 다운로드 하면 다음과 같은 에러가 발생한다.
java.lang.UnsupportedClassVersionError: org/eclipse/jdt/core/compiler/batch/BatchCompiler has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 (unable to load class [org.eclipse.jdt.core.compiler.batch.BatchCompiler])
1.1.3. Java 17 이상인 경우
The Eclipse Project Downloads 에서 최신버전을 클릭하면, 2024. 11. 14. 현재 최신버전인 Eclipse 4.33.0 Release Build: 4.33 페이지에 접속할 수 있다.
아래쪽으로 스크롤을 내리다가 JDT Core Batch Compiler 에서 ecj-4.33.jar 을 다운로드 한다.
1.2. Apache Tomcat 이 설치되어 있는 경우
설치되어 있는 Apache Tomcat 이 비교적 최신 버전이라면,
lib/ecj-*.jar
파일을 이용할 수 있다.
다만, 오래된 ecj-*.jar
이라면,
org.eclipse.jdt.core.JDTCompilerAdapter
가 없기 때문에
다음과 같이 확인한다.
javap -classpath ecj-4.20.jar org.eclipse.jdt.core.JDTCompilerAdapter
참고로
org.eclipse.jdt.core_3.16.0.jar
ecj-4.6.3.jar
ecj-4.4.2.jar
같은 버전들은org.eclipse.jdt.core.JDTCompilerAdapter
가 없다.
2. Apache Ant lib 디렉토리로 ecj-*.jar
파일 복사
${ANT_HOME}/lib 디렉토리로 복사한다.
심볼릭 링크(symbolic link) 로 걸어도 된다.
3. build.xml 파일 수정
<target>
이 시작하기 전에 다음과 같은 내용을 추가한다.
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> <presetdef name="javac"> <javac includeantruntime="false"> <compilerarg compiler="org.eclipse.jdt.core.JDTCompilerAdapter" line="-1.7 -warn:-serial,-raw" /> </javac> </presetdef>
<presetdef name="javac">
부분에 추가하면<javac>
Task 마다 추가할 필요가 없다.
4. 관련 주제
4.1. 필요 없는 경고 (WARNING) 메시지 생략하기
Eclipse JDT Compilier (ecj) 의 장점은 더 많은 경고 (WARNING) 메시지를 얻을 수 있다는 것인데,
너무 많은 경고메시지를 피하기 위해서 -warn
파라미터를 조정할 수 있다.
많이 사용되는 것은 -warn:-serial,-raw
혹은 -warn:-unchecked,-serial,-raw
정도이다.
-serial
: serialVersionUID 가 누락되었다는 경고를 생략한다.-raw
: "Class is a raw type. References to generic type Classshould be parameterized" 와 같은 경고를 생략한다. -unchecked
: "Type safety: Unchecked cast from Object to String" 와 같은 경고를 생략한다.
-warn
파라미터에 추가할 수 있는 다른 항목은 다음과 같은 명령어로 확인할 수 있다.
java -jar ecj-4.20.jar -help:warn
4.2. 소스코드의 일부는 javac 로 컴파일하고, 나머지는 Eclipse JDT Compilier (ecj) 로 컴파일 하기
아래와 같이 하면, kr/graha/legacy/
아래의 파일들은 javac 로 컴파일하고,
나머지는 Eclipse JDT Compilier (ecj) 로 컴파일한다.
<javac destdir="${build.dir}" excludes="kr/graha/legacy/**/*.java" > <src path="${src.dir}"/> <classpath refid="master-classpath"/> </javac> <javac destdir="${build.dir}" includes="kr/graha/legacy/**/*.java" compiler="modern" > <src path="${src.dir}"/> <classpath refid="master-classpath"/> </javac>
javac 로 컴파일하는 옵션은 compiler="modern"
이다.
4.3. Eclipse JDT Compilier (ecj) 로 명령행에서 컴파일
java -jar ecj-4.20.jar HelloWorld.java
Java 와 ecj-*.jar
는 각각 어울리는 버전들이 있다.
- Java 17 :
ecj-4.33.jar
- Java 11 : (Apache Tomcat 9.x 에 번들된)
ecj-4.20.jar
정도 - Java 8 : (Apache Tomcat 8.x 에 번들된)
ecj-4.6.3.jar
나 (Apache Tomcat 7.x 에 번들된)ecj-4.4.2.jar
정도
Java 11 이라면,
최신버전인 ecj-4.33.jar
에서는 java.lang.UnsupportedClassVersionError
에러가 발생하고,
ecj-4.6.3.jar
나 ecj-4.4.2.jar
에서는 rt.jar 파일을 찾을 수 없어서 발생하는
The type java.lang.Object cannot be resolved.
에러가 발생하므로 주의를 요한다.
공식 매뉴얼의 예제는 다음과 같이
rt.jar
를 요구하고 있는데,rt.jar
파일은 java 1.9 부터 없어졌다.
java -jar ecj-4.20.jar HelloWorld.java -classpath rt.jar