模块 jdk.compiler
com.sun.source.*
包提供了Compiler Tree API:用于访问表示 Java 源代码和文档注释的抽象树 (AST) 的 API,由 javac、javadoc 和相关工具使用。
javac
该模块通过 ToolProvider
和 Tool
服务提供商接口 (SPI) 提供对 javac 的等效命令行访问,并通过 JavaCompiler
SPI 提供更灵活的访问。
可以通过调用名称为 "javac"
的 ToolProvider.findFirst
或 服务加载器 来获取这些工具的实例。
此外,从 JavaCompiler 获得的 JavaCompiler.CompilationTask
实例可以向下转换为 JavacTask
以访问 javac 的较低级别方面,例如 Abstract Syntax Tree
(AST)。
此模块使用 FileSystemProvider
API 来定位文件系统提供程序。特别是,这意味着如果编译器要能够读取 JAR 文件,则 jar 文件系统提供程序(例如 jdk.zipfs
模块中的提供程序)必须可用。
选项和环境变量
javac 支持的全套选项和环境变量在 javac Tool Guide 中给出。但是,通过其 API 调用编译器时存在一些限制。-J
选项不受支持。必须在用于调用 API 的 VM 中设置任何必要的 VM 选项。如果在通过JavaCompiler
API 调用工具时使用该选项,将抛出IllegalArgumentException
;如果在通过ToolProvider
或旧版Main
API 调用 javac 时使用该选项,则会报告错误。不支持“类路径通配符”功能。该功能仅受本机启动器支持。通过其 API 调用该工具时,所有必需的 jar 文件应直接包含在
--class-path
选项或CLASSPATH
环境变量中。当通过其 API 调用该工具时,类路径的所有组件都将按字面意义获取,如果没有匹配的目录或文件,将被忽略。-Xlint:paths
选项可用于生成有关缺少组件的警告。
JavaCompiler
接口调用编译器时,以下限制适用。
不支持参数文件(所谓的@-files)。任何此类文件的内容都应直接包含在通过此 API 调用该工具时提供的选项列表中。如果在通过此 API 调用工具时使用该选项,将抛出
IllegalArgumentException
。不支持环境变量
JDK_JAVAC_OPTIONS
。环境变量中定义的任何选项都应直接包含在调用 API 时提供的选项列表中;环境变量中的任何值都将被忽略。不支持仅用于获取信息的选项(例如
--help
、--help-extended
、--version
和--full-version
)。如果在通过此 API 调用该工具时使用了这些选项中的任何一个,将抛出IllegalArgumentException
。- 路径相关选项取决于调用
JavaCompiler.getTask(java.io.Writer, javax.tools.JavaFileManager, javax.tools.DiagnosticListener<? super javax.tools.JavaFileObject>, java.lang.Iterable<java.lang.String>, java.lang.Iterable<java.lang.String>, java.lang.Iterable<? extends javax.tools.JavaFileObject>)
时使用的文件管理器。使用默认文件管理器或从中派生的文件管理器时,“标准”选项(例如--class-path
、--module-path
等)可用。当使用不同的文件管理器时,这些选项可能不可用并且不同的选项可能可用。如果在通过此 API 调用工具时使用了工具或文件管理器未知的任何选项,将抛出IllegalArgumentException
。
CLASSPATH
环境变量 is 受到尊重,尽管不鼓励这样使用。 VM 启动后无法取消设置环境变量,因此建议确保在启动将用于调用编译器的 VM 时未设置环境变量。但是,如果已设置值,则可以通过在调用编译器时使用 --class-path
选项或在通过 JavaCompiler
接口调用编译器时在文件管理器中设置 StandardLocation.CLASS_PATH
来覆盖任何此类值。
SuppressWarnings
JLS 9.6.4.5 指定了一些字符串,这些字符串可用于抑制 Java 编译器可能生成的警告。此外,javac 还支持可用于抑制其他类型警告的其他字符串。下表列出了可以与@SuppressWarnings
一起使用的所有字符串。
String | 忽略关于...的警告 |
---|---|
auxiliaryclass |
隐藏在源文件中的辅助类,可从其他文件中使用 |
cast |
使用不必要的强制转换 |
classfile |
与类文件内容相关的问题 |
deprecation |
使用已弃用的项目 |
dep-ann |
在文档注释中标记为已弃用但未使用 @Deprecated 注释的项目 |
divzero |
除以常数整数 0 |
empty |
if 后的空语句 |
exports |
关于模块导出的问题 |
fallthrough |
从 switch 语句的一个案例跌落到下一个案例 |
finally |
finally 不正常终止的子句 |
lossy-conversions |
复合赋值中可能的有损转换 |
missing-explicit-ctor |
导出包中的公共类和受保护类中缺少显式构造函数 |
module |
模块系统相关问题 |
opens |
关于模块打开的问题 |
overloads |
关于方法重载的问题 |
overrides |
关于方法覆盖的问题 |
path |
命令行上的无效路径元素 |
preview |
使用预览语言功能 |
rawtypes |
使用原始类型 |
removal |
使用已标记为删除的 API |
requires-automatic |
在 requires 子句中使用自动模块 |
requires-transitive-automatic |
requires transitive 中的自动模块 |
serial |
Serializable 类没有 serialVersionUID 字段,或 Serializable 和 Externalizable 类和接口中的其他可疑声明 |
static |
使用实例访问静态成员 |
strictfp |
不必要地使用 strictfp 修饰符 |
synchronization |
对基于值的类的实例进行同步尝试 |
text-blocks |
文本块缩进中的空白字符不一致 |
try |
与使用 try 块(即 try-with-resources)相关的问题 |
unchecked |
未经检查的操作 |
varargs |
潜在不安全的可变参数方法 |
doclint:accessibility |
文档注释中发现的可访问性问题 |
doclint:all |
文档注释中发现的所有问题 |
doclint:html |
文档注释中发现的 HTML 问题 |
doclint:missing |
文档注释中缺少项目 |
doclint:reference |
文档注释中发现的参考问题 |
doclint:syntax |
文档注释中发现的语法问题 |
- 模块图:
- 工具指南:
- javac
- 自从:
- 9
-
包
包描述提供将文档注释表示为抽象语法树 (AST) 的接口。提供将源代码表示为抽象语法树 (AST) 的接口。为抽象语法树 (AST) 的操作提供实用程序。该软件包为 javac 工具提供了一个遗留入口点。 -
模块
-
服务
类型描述从程序中调用 Java 编程语言编译器的接口。可从程序中调用的工具的通用接口。