JavaCompiler — 자바 언어 컴파일러 호출 인터페이스

JavaCompiler — 자바 언어 컴파일러 호출 인터페이스

프로그램 안에서 자바 컴파일러(javac)를 직접 구동하고 싶을 때가 있어요. 그럴 때 사용하는 것이 JavaCompiler 인터페이스예요. 프로그램에서 자바 언어 컴파일러를 호출하기 위한 인터페이스로, ToolOptionChecker를 확장해요.

컴파일러는 컴파일 중 진단(예: 오류 메시지)을 생성할 수 있어요. 진단 리스너를 제공하면 진단이 리스너로 전달되고, 리스너가 없으면 기본 형식으로 System.err에 출력돼요.

출처: Java API Reference

본문

JavaCompiler는 인터페이스로, 주요 메서드는 다음과 같아요.

JavaCompiler.CompilationTask getTask(Writer out, JavaFileManager fileManager,
    DiagnosticListener<? super JavaFileObject> diagnosticListener,
    Iterable<String> options, Iterable<String> classes,
    Iterable<? extends JavaFileObject> compilationUnits)
StandardJavaFileManager getStandardFileManager(
    DiagnosticListener<? super JavaFileObject> diagnosticListener,
    Locale locale, Charset charset)
  • getTask(...) — 실제 컴파일을 수행하는 CompilationTask를 만들어요. 출력 스트림, 파일 매니저, 진단 리스너, 옵션, 컴파일할 파일 객체들을 인자로 받아요.
  • getStandardFileManager(...) — 표준 파일 매니저(StandardJavaFileManager)를 얻어요. java.io.File 기반으로 파일을 다루는 기본 파일 매니저예요.

전형적인 사용 패턴은 이래요.

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
StandardJavaFileManager fm = compiler.getStandardFileManager(diagnostics, null, null);
Iterable<? extends JavaFileObject> units = fm.getJavaFileObjectsFromFiles(files);
JavaCompiler.CompilationTask task = compiler.getTask(null, fm, diagnostics, null, null, units);
boolean ok = task.call();

getTask가 반환하는 CompilationTaskcall()을 호출하면 컴파일이 실행되고 성공 여부가 돌아와요. 이 인터페이스는 javax.tools 패키지에 속해요.

더 알아보기 (Learn more)