public interface JavaCompiler extends Tool, OptionChecker
编译器可能在编译过程中生成诊断(例如,错误消息)。如果提供了一个诊断侦听器,则将向侦听器提供诊断程序。如果没有提供听众,诊断将被格式化一个未指定的格式写入默认的输出,这是System.err
除非另有规定。即使是一些听众提供诊断,诊断可能不适合在一个Diagnostic
将写入默认的输出。
一个编译器工具有一个相关的标准文件管理器,它是本地到工具(或内置)的文件管理器。标准的文件管理器可以通过调用getStandardFileManager获得。
一个编译器工具必须与任何文件管理器,只要有任何额外的要求,如下面的方法中的详细满足。如果没有提供文件管理器,编译器将使用标准的文件管理器,如一个由getStandardFileManager。
实现该接口的实例必须符合The Java™ Language Specification和生成类文件符合The Java™ Virtual Machine Specification。这些规范的版本是在Tool接口定义。此外,该接口支持SourceVersion.RELEASE_6
或更高的实例也必须支持annotation processing。
编译器依赖两种服务:diagnostic listener和file manager。虽然在这个包中的类和接口定义了一个API,大多数编译器(和工具一般)的接口DiagnosticListener,JavaFileManager,FileObject,和JavaFileObject不适用于应用程序。而这些接口的目的是实现和使用一个编译器提供定制服务,从而定义了一个SPI的编译器。
这包是旨在缓解SPI实现自定义一个编译器的行为的一些类和接口:
StandardJavaFileManager
标准文件管理器有两个目的:
重用一个文件管理器可以潜在地减少扫描文件系统和读取文件的开销。虽然有可能在开销没有减少,一个标准的文件管理器必须与多个顺序编辑制作下面推荐的编码模式:
文件档案= []…用于第一个编译任务的/ /输入文件[ ] 2 =…用于第二编译任务的/ /输入javacompiler = toolprovider getsystemjavacompiler()编译器;standardjavafilemanager文件管理器=编译器。getstandardfilemanager(空,空,空的);Iterable<? extends JavaFileObject>
compilationunits1 =文件管理器。getjavafileobjectsfromfiles(Arrays.asList(档案));编译器。gettask(null,文件管理器,空,空,空,compilationunits1 call());Iterable<? extends JavaFileObject>
compilationunits2 =文件管理器。getjavafileobjects(2);//使用替代方法/重用相同的文件管理器,以允许缓存罐子文件编译器。gettask(null,文件管理器,空,空,空,compilationunits2 call());文件管理器();
DiagnosticCollector
收集诊断Iterable<? extends JavaFileObject>
compilationunits =…;javacompiler = toolprovider getsystemjavacompiler()编译器;DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
standardjavafilemanager文件管理器=编译器。getstandardfilemanager(诊断,null,null);编译器。gettask(null,文件管理器,诊断,零,零,compilationunits call());对于(Diagnostic<? extends JavaFileObject>
诊断:诊断。getdiagnostics())系统。格式(“在“%”中的行上的错误”,getlinenumber()诊断,诊断。getsource() touri());文件管理器();
ForwardingJavaFileManager
,
ForwardingFileObject
,和
ForwardingJavaFileObject
最后Logger记录仪=…; Iterable<? extends JavaFileObject>
compilationunits =…;javacompiler = toolprovider getsystemjavacompiler()编译器;standardjavafilemanager stdfilemanager =编译器。getstandardfilemanager(空,空,空的);文件管理=新forwardingjavafilemanager(stdfilemanager){flush()抛出IOException { public void记录器。进入(standardjavafilemanager。类。getname(),“冲洗”);flush()超;记录器。退出(standardjavafilemanager。类。getname(),“冲洗”);}};编译器。gettask(null,文件管理器,空,空,空,compilationunits call());
SimpleJavaFileObject
/ * **用于表示从字符串中传来的源的文件对象。*
/公共课javasourcefromstring延伸simplejavafileobject {/ * **此“文件”的源代码。*
/最后字符串代码;/ * **建立一个新的javasourcefromstring。*@
param名称的编译单元通过该文件对象表示*@
param代码的文件对象表示的编译单元的源代码*
/JavaSourceFromString(字符串,字符串的代码){超(URI.create(“字符串:/ / /“+姓名。取代('。',' / ')+种。源。扩展),种类,来源);this.code =代码;}@
override公共CharSequence getcharcontent(布尔ignoreencodingerrors){返回代码;}}
DiagnosticListener
,
Diagnostic
,
JavaFileManager
Modifier and Type | Interface and Description |
---|---|
static interface |
JavaCompiler.CompilationTask
表示编译任务的未来的接口。
|
Modifier and Type | Method and Description |
---|---|
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)
用给定的组件和参数创建一个编译任务的未来。
|
getSourceVersions, run
isSupportedOption
JavaCompiler.CompilationTask getTask(Writer out, JavaFileManager fileManager, DiagnosticListener<? super JavaFileObject> diagnosticListener, Iterable<String> options, Iterable<String> classes, Iterable<? extends JavaFileObject> compilationUnits)
如果提供的是一个文件管理器,它必须能够处理StandardLocation
中定义的所有位置。
注:标注加工过程的编译单元的源代码进行编译,通过compilationUnits
参数,以及类文件,他们的名字是通过classes
参数。
out
-一种从编译器额外产出的作家;如果
null
使用
System.err
fileManager
-文件管理器;如果
null
编译使用标准的文件管理器
diagnosticListener
-诊断的倾听者;如果
null
使用编译器的默认方法报告诊断
options
编译器选项,
null
意味着没有选择
classes
名称的类被标注处理,
null
意味着没有类名
compilationUnits
-编制单位编制,
null
意味着没有编制单位
RuntimeException
-如果用户提供的组件时发生不可恢复的错误。的
cause将用户代码中的错误。
IllegalArgumentException
-如果任何选项是无效的,或者如果任何给定的编译单元是另一种比
source
StandardJavaFileManager getStandardFileManager(DiagnosticListener<? super JavaFileObject> diagnosticListener, Locale locale, Charset charset)
标准的文件管理器将自动重新开放,如果是在电话flush
或close
访问。标准文件管理器必须与其他工具一起使用。
diagnosticListener
-非致命的诊断诊断的倾听者;如果
null
使用编译器的默认方法报告诊断
locale
-现场应用时
null
意味着
default locale格式诊断。
charset
-使用的字符集解码字节;如果
null
使用平台的默认
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.