Module jdk.compiler
com.sun.source.*
包提供了编译器树API:用于访问表示Java源代码和文档注释的抽象树(AST)的API,被javac、javadoc和相关工具使用。
javac
该模块通过ToolProvider
和Tool
服务提供者接口(SPI)提供了对javac的命令行访问等效项,并通过JavaCompiler
SPI提供了更灵活的访问方式。
可以通过调用ToolProvider.findFirst
或使用名称"javac"
调用服务加载器来获取工具的实例。
此外,从JavaCompiler获取的JavaCompiler.CompilationTask
实例可以向下转型为javac的低级方面,例如抽象语法树
(AST)的访问。
该模块使用FileSystemProvider
API来定位文件系统提供者。特别是,这意味着如果编译器要能够读取JAR文件,则必须提供JAR文件系统提供者,例如在jdk.zipfs
模块中的提供者。
选项和环境变量
javac支持的所有选项和环境变量集合在javac工具指南中列出。但是,当通过其API调用编译器时存在一些限制。-
-J
选项不受支持。任何必要的VM选项必须在调用API时设置在VM中。如果在通过JavaCompiler
API调用工具时使用了该选项,将抛出IllegalArgumentException
;如果在通过ToolProvider
或传统的Main
API调用javac时使用了该选项,将报告错误。 -
"classpath通配符"功能不受支持。该功能仅由本机启动器支持。通过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
环境变量会被尊重,尽管不建议这样使用。一旦启动了VM,环境变量就无法取消设置,因此建议确保在启动将用于调用编译器的VM时不设置环境变量。但是,如果已设置了值,则可以通过在调用编译器时使用--class-path
选项或在通过JavaCompiler
接口调用编译器时在文件管理器中设置StandardLocation.CLASS_PATH
来覆盖任何此类值。
SuppressWarnings
JLS 9.6.4.5指定了可用于抑制Java编译器可能生成的警告的一些字符串。此外,javac还支持其他可用于抑制其他类型警告的字符串。以下表格列出了所有可用于@SuppressWarnings
的字符串。
字符串 | 抑制关于...的警告 |
---|---|
auxiliaryclass |
源文件中隐藏的辅助类,用于其他文件中使用 |
cast |
不必要的强制类型转换的使用 |
classfile |
与类文件内容相关的问题 |
deprecation |
使用已弃用的项目 |
dep-ann |
在文档注释中标记为已弃用但未使用@Deprecated 注解的项目 |
divzero |
通过常量整数0 进行除法 |
empty |
if 后的空语句 |
exports |
与模块导出相关的问题 |
fallthrough |
从一个switch 语句的一个case穿透到下一个case |
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 |
没有serialVersionUID 字段的Serializable 类,或Serializable 和Externalizable 类和接口中的其他可疑声明 |
static |
使用实例访问静态成员 |
strictfp |
不必要使用strictfp 修饰符 |
synchronization |
在基于值的类的实例上尝试同步 |
text-blocks |
文本块缩进中不一致的空格字符 |
this-escape |
超类构造函数在子类初始化之前泄漏this |
try |
与try 块的使用相关的问题(即,try-with-resources) |
unchecked |
未经检查的操作 |
varargs |
潜在不安全的可变参数方法 |
doclint:accessibility |
在文档注释中发现的可访问性问题 |
doclint:all |
在文档注释中发现的所有问题 |
doclint:html |
在文档注释中发现的HTML问题 |
doclint:missing |
文档注释中缺少的项目 |
doclint:reference |
在文档注释中发现的引用问题 |
doclint:syntax |
在文档注释中发现的语法问题 |
- 模块图:
-
- 工具指南:
- javac
- 自JDK版本:
- 9
-
Packages
ExportsPackageDescription提供用于将文档注释表示为抽象语法树(AST)的接口。提供用于将源代码表示为抽象语法树(AST)的接口。提供用于操作抽象语法树(AST)的实用工具。该包为javac工具提供了一个传统的入口点。Indirect Exports -
Modules
Requires -
Services
ProvidesTypeDescription从程序中调用Java编程语言编译器的接口。可以从程序中调用的工具的通用接口。Uses