JavaCompiler — 자바 언어 컴파일러 호출 인터페이스
JavaCompiler — 자바 언어 컴파일러 호출 인터페이스
프로그램 안에서 자바 컴파일러(javac)를 직접 구동하고 싶을 때가 있어요. 그럴 때 사용하는 것이 JavaCompiler 인터페이스예요. 프로그램에서 자바 언어 컴파일러를 호출하기 위한 인터페이스로, Tool과 OptionChecker를 확장해요.
컴파일러는 컴파일 중 진단(예: 오류 메시지)을 생성할 수 있어요. 진단 리스너를 제공하면 진단이 리스너로 전달되고, 리스너가 없으면 기본 형식으로 System.err에 출력돼요.
본문
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가 반환하는 CompilationTask의 call()을 호출하면 컴파일이 실행되고 성공 여부가 돌아와요. 이 인터페이스는 javax.tools 패키지에 속해요.