Java Compile 사용

Java 2009. 8. 26. 19:31

java 소스 안에서 다른 java 소스를 컴파일 할때 외부프로그램 실행으로 javac를 실행할수도 있지만 ( Runtime.exec(cmd) )
건수가 많을 경우 OS의 process가 증가하여 별로 좋은 방법 같이 않다.
 
JDK 1.4와 JDK5의 홈디렉토리의 ./lib/tools.jar 라는 곳을 보면
com.sun.tools.javac.Mainsun.tools.javac.Main
두가지의 java 소스를 컴파일 할 수 있는 클래스가 존재한다.
그런데 sun.tool.javac.Main은 이미 JDK 1.4 버전때부터 deprecated 되었으므로
com.sun.tools.javac.Main
사용하였다.

com.sun.tools.javac.Main를 살짝 보면 JavaCompiler 등의 클래스 등이 보이는데 ( decompile ...)
JDK 1.6에선 API로 제공되는 것 같다.

com.sun.tools.javac.Main을 사용하기 위해선 JDK HOME에 있는 ./lib/tools.jar를 classpath에 걸어줘야 한다.



JavaCompiler.java 샘플 소스  :::


JavaCompiler.java 샘플 소스 설명 :::
import com.sun.tools.javac.Main; 후에 Main.compile()를 사용한다.
첫번째 인자는 javac 실행시킬경우 주게되는 옵션과 동일하며 옵션 및 값을 String[] 에 담아 넘겨주면 된다.
두번째 인자는 컴파일 도중 발생하는 에러 메세지등을 확인하기 위해 이를 어느곳에 출력시킬지를 지정해준다.
주석처리된 //listing = new PrintWriter( System.out, true ); 를 사용할 경우 무조건 바로 화면에 뿌려주며
샘플 소스에선 swriter = new StringWriter(); 를 통해 String에 담은후
컴파일 결과 ( int rst )가 실패인 경우 ( 0 != rst ) 출력하고 있다.

물론, Main.compile()엔 첫번째 인자만 받는 메소드도 있다.


좋다..



'Java' 카테고리의 다른 글

Java에서 XML 다루기 DOM, SAX, JDOM, StAX  (3) 2010.02.06
간단하게 gzip 압축 및 해제 해보기  (0) 2010.02.03
Java Thread  (0) 2010.01.24
Exception 을 문자열로...  (0) 2009.09.07
Java에서 외부 프로그램 실행  (0) 2009.08.26
SimpleDateFormat -> FastDateFormat  (1) 2009.06.29
용어 설명  (0) 2009.02.23
jconsole test - (sun jdk 1.5)  (0) 2009.02.23