|
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 도 참조해 주세요.