|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
public interface JavaCompiler
Java 프로그램으로부터 Java™ 프로그램 언어 컴파일러를 호출하는 인터페이스입니다.
컴파일러는, 컴파일중에 에러 메세지등의 진단 정보를 생성하는 일이 있습니다. 진단 청취자가 지정되고 있는 경우, 진단 정보는 이 청취자에게 제공됩니다. 청취자가 지정되어 있지 않은 경우, 진단 정보는 하등의 형식 (미지정)에서 포맷 되어 디폴트의 출력에 기입해집니다. 이 디폴트의 출력은, 특히 지정되어 있지 않으면 System.err 가 됩니다. 진단 청취자가 지정되고 있어도, 일부의 진단 정보가 Diagnostic 에 적합하지 않는 경우가 있습니다. 이 경우, 이 진단 정보는 디폴트의 출력에 기입해집니다.
컴파일러 툴에는, 표준 파일 관리자-가 관련지을 수 있고 있습니다. 이 파일 관리자-는, 컴파일러 툴의 네이티브의 (편입형의) 파일 관리자-입니다. 표준 파일 관리자-를 가져오려면 ,getStandardFileManager 를 호출합니다.
컴파일러 툴은, 추가 요건 (자세한 것은 아래와 같은 메소드를 참조)이 채워지고 있는 한은, 임의의 파일 관리자-로 기능할 필요가 있습니다. 파일 관리자-가 지정되지 않았던 경우, 컴파일러 툴은, 표준 파일 관리자- (예를 들어 getStandardFileManager 에 의해 반환되는 파일 관리자-)를 사용합니다.
이 인터페이스를 구현하는 인스턴스는, 「Java 언어 스펙」에 준거하고 있어, 한편 「Java 가상 머신 스펙」에 준거한 클래스 파일을 생성할 필요가 있습니다. 이러한 스펙의 버젼은,Tool 인터페이스에 정의되고 있습니다.
게다가 이 인터페이스의 인스턴스 가운데,SourceVersion.RELEASE_6 이상을 지원하는 것은,주석 처리도 지원할 필요가 있습니다.
컴파일러는,진단 청취자와파일 관리자-의 2 개의 서비스에 의존하고 있습니다. 이 패키지에 포함되는 대부분의 클래스 및 인터페이스는 컴파일러 ( 및 툴 일반)의 API 를 정의하고 있습니다만,DiagnosticListener ,JavaFileManager ,FileObject , 및 JavaFileObject 의 각 인터페이스는 어플리케이션으로 사용하기 위한의 것이 아닙니다. 이러한 인터페이스는, 컴파일러용의 커스텀 서비스를 제공하는 목적으로 구현되어 사용됩니다. 따라서, 컴파일러의 SPI 를 정의합니다.
이 패키지에는, SPI 의 구현을 간편화해, 컴파일러의 동작을 커스터마이즈하기 위한 클래스 및 인터페이스가 다수 포함되어 있습니다.
StandardJavaFileManager 표준 파일 관리자-에는, 다음의 2 개의 용도가 있습니다.
파일 관리자-를 재사용하는 것으로, 파일 시스템의 스캔과 jar 파일의 읽기의 오버헤드가 잠재적으로 삭감될 가능성이 있습니다. 오버헤드가 삭감되지 않는 경우에서도, 표준 파일 관리자-는 복수의 컴파일 태스크를 차례차례 처리할 필요가 있습니다. 다음의 예의 같은 코딩 패턴을 추천합니다.
Files[] files1 = ...; // 최초의 컴파일 태스크의 입력 Files[] files2 = ...; // 2 번째의 컴파일 태스크의 입력 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);Iterable<? extends JavaFileObject>compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(Arrays.asList (files1)); compiler.getTask(null, fileManager, null, null, null, compilationUnits1). call();Iterable<? extends JavaFileObject>compilationUnits2 = fileManager.getJavaFileObjects(files2); // 대체 메소드를 사용 // jar 파일의 캐쉬를 유효하게 하기 위한(해) 같은 파일 관리자-를 재사용 compiler.getTask(null, fileManager, null, null, null, compilationUnits2). call(); fileManager.close();
DiagnosticCollector Iterable<? extends JavaFileObject>compilationUnits = ...; JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits). call(); for (Diagnostic diagnostic :diagnostics.getDiagnostics()) System.out.format("Error on line %d in %d%n", diagnostic.getLineNumber() diagnostic.getSource(). toUri()); fileManager.close();
ForwardingJavaFileManager ,ForwardingFileObject , 및 ForwardingJavaFileObject
final Logger logger = ...;
Iterable<? extends JavaFileObject> compilationUnits = ...;
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, null, null);
JavaFileManager fileManager = new ForwardingJavaFileManager(stdFileManager) {
public void flush() {
logger.entering(StandardJavaFileManager.class.getName(), "flush");
super.flush();
logger.exiting(StandardJavaFileManager.class.getName(), "flush");
}
};
compiler.getTask(null, fileManager, null, null, null, compilationUnits). call();
SimpleJavaFileObject
/**
* 캐릭터 라인에 포함된 소스를 나타내기 위해서(때문에) 사용하는 파일 객체.
*/
public class JavaSourceFromString extends SimpleJavaFileObject {
/**
* 이 「파일」의 원시 코드.
*/
final String code;
/**
* 새로운 JavaSourceFromString 를 구축.
* @param name 는 이 파일 객체로 나타내지는 컴파일 유니트의 이름
* @param code 는 이 파일 객체로 나타내지는 컴파일 유니트의 원시 코드
*/
JavaSourceFromString(String name, String code) {
super(URI.create ("string:///" + name.replace('. ', '/') + Kind.SOURCE.extension),
Kind.SOURCE);
this.code = code;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
DiagnosticListener ,
Diagnostic ,
JavaFileManager | 상자의 클래스의 개요 | |
|---|---|
static interface |
JavaCompiler.CompilationTask
컴파일 태스크의 장래를 나타내는 인터페이스입니다. |
| 메소드의 개요 | |
|---|---|
StandardJavaFileManager |
getStandardFileManager (DiagnosticListener <? super JavaFileObject > diagnosticListener,
Locale locale,
Charset charset)
이 툴의 표준 파일 관리자-구현의 새로운 인스턴스를 가져옵니다. |
JavaCompiler.CompilationTask |
getTask (Writer out,
JavaFileManager fileManager,
DiagnosticListener <? super JavaFileObject > diagnosticListener,
Iterable <String > options,
Iterable <String > classes,
Iterable <? extends JavaFileObject > compilationUnits)
지정의 컴퍼넌트 및 인수를 가지는 컴파일 태스크의 장래를 작성합니다. |
| 인터페이스 javax.tools. Tool 로부터 상속된 메소드 |
|---|
getSourceVersions , run |
| 인터페이스 javax.tools. OptionChecker 로부터 상속된 메소드 |
|---|
isSupportedOption |
| 메소드의 상세 |
|---|
JavaCompiler.CompilationTask getTask(Writer out,
JavaFileManager fileManager,
DiagnosticListener <? super JavaFileObject > diagnosticListener,
Iterable <String > options,
Iterable <String > classes,
Iterable <? extends JavaFileObject > compilationUnits)
파일 관리자-가 지정되고 있는 경우,StandardLocation 에 정의 떠날 수 있어 모든 장소를 처리할 수 없으면 안됩니다.
out - 컴파일러로부터의 추가 출력에 사용하는 Writer. null 의 경우는 System.err 를 사용fileManager - 파일 관리자-. null 의 경우는 컴파일러의 표준 파일 관리자-를 사용diagnosticListener - 진단 청취자. null 의 경우, 컴파일러의 디폴트의 메소드를 사용해 진단 정보를 보고options - 컴파일러 옵션. null 의 경우, 옵션은 존재하지 않는classes - 클래스명 (주석 처리용). null 의 경우, 클래스명은 존재하지 않는compilationUnits - 컴파일 대상의 컴파일 유니트. null 의 경우, 컴파일 유니트는 존재하지 않는다
RuntimeException - 사용자 지정의 컴퍼넌트내에서, 회복 불가능한 에러가 발생했을 경우.
cause 는 사용자 코드내의 에러
IllegalArgumentException - 소스와는 다른 종류의 컴파일 유니트가 지정되었을 경우
StandardJavaFileManager getStandardFileManager(DiagnosticListener <? super JavaFileObject > diagnosticListener,
Locale locale,
Charset charset)
표준 파일 관리자-는,flush 또는 close 의 호출의 나중에 액세스 되면(자), 자동적으로 재기동합니다. 표준 파일 관리자-는, 그 외의 툴로부터 이용할 수 없으면 안됩니다.
diagnosticListener - 치명적이지 않은 진단 정보용의 진단 청취자. null 의 경우, 컴파일러의 디폴트의 메소드를 사용해 진단 정보를 보고locale - 진단 정보의 포맷시에 적용되는 로케일. null 의 경우,디폴트의 로케일이 적용되는charset - 바이트의 디코드에 사용된 캐릭터 세트. null 의 경우, 플랫폼의 디폴트의 캐릭터 세트를 사용
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.