模块 jdk.compiler


模块jdk.compiler
定义 系统Java编译器 及其等效命令行 javac 的实现。

com.sun.source.* 包提供了Compiler Tree API:用于访问表示 Java 源代码和文档注释的抽象树 (AST) 的 API,由 javacjavadoc 和相关工具使用。

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 接口调用编译器时,以下限制适用。 请注意,在通过其 API 调用编译器时,CLASSPATH 环境变量 is 受到尊重,尽管不鼓励这样使用。 VM 启动后无法取消设置环境变量,因此建议确保在启动将用于调用编译器的 VM 时未设置环境变量。但是,如果已设置值,则可以通过在调用编译器时使用 --class-path 选项或在通过 JavaCompiler 接口调用编译器时在文件管理器中设置 StandardLocation.CLASS_PATH 来覆盖任何此类值。

SuppressWarnings

JLS 9.6.4.5 指定了一些字符串,这些字符串可用于抑制 Java 编译器可能生成的警告。此外,javac 还支持可用于抑制其他类型警告的其他字符串。下表列出了可以与 @SuppressWarnings 一起使用的所有字符串。
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 字段,或 SerializableExternalizable 类和接口中的其他可疑声明
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 文档注释中发现的语法问题
模块图:
Module graph for jdk.compilerModule graph for jdk.compiler
工具指南:
javac
自从:
9