模块 java.compiler

包 javax.tools


javax.tools
为可以从程序中调用的工具提供接口,例如编译器。

这些接口和类是 Java 平台标准版 (Java SE) 的一部分,但不需要提供任何实现它们的工具。

除非明确允许,否则如果给定一个 null 参数或给定一个包含 null 元素的 列表或集合,此包中的所有方法都可能抛出 NullPointerException 。同样,除非明确允许,否则任何方法都不能返回 null

这个包是 Java 编程语言编译器框架的所在地。该框架允许框架的客户端从程序中定位和运行编译器。该框架还提供用于结构化访问诊断的服务提供者接口 (SPI) (DiagnosticListener ) 以及用于覆盖文件访问的文件抽象(JavaFileManager JavaFileObject )。有关使用 SPI 的更多详细信息,请参阅 JavaCompiler

运行时不需要编译器。但是,如果提供了默认编译器,则可以使用 ToolProvider 找到它,例如:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
 

可以通过 服务商机制 提供替代编译器或工具。

例如,如果 com.vendor.VendorJavaCompilerJavaCompiler 工具的提供者,那么它的 jar 文件将包含文件 META-INF/services/javax.tools.JavaCompiler。该文件将包含单行:

com.vendor.VendorJavaCompiler
 

如果 jar 文件在类路径中,VendorJavaCompiler 可以使用如下代码定位:

JavaCompiler compiler = ServiceLoader.load(JavaCompiler.class).iterator().next();
 
自从:
1.6