Java Compiler API 核心原理与应用场景
一、背景与定位
1. 诞生背景
在 Java 6(JSR 199) 之前,Java 的编译能力主要以两种形式存在:
- 命令行工具:
javac - IDE / 构建工具内部实现(如 Ant、IDEA、Eclipse 的编译器)
这些方式存在明显局限:
- 无法在 运行时 直接进行 Java 源码编译
- 无法在 服务端 / 工具链 / DSL / 插件系统 中嵌入标准编译能力
- 缺乏统一、标准、可扩展的编译 API
Java Compiler API(JSR 199) 的目标是:
将
javac的核心能力以 标准化、可编程 API 的形式暴露出来。
二、整体架构与核心组件
Java Compiler API 主要位于:
javax.tools
其整体结构可以理解为一个 可嵌入式编译器框架。


1. 核心接口总览
| 接口 / 类 | 作用 |
|---|---|
JavaCompiler | 编译器主入口 |
ToolProvider | 获取系统编译器 |
CompilationTask | 一次编译任务 |
JavaFileObject | 抽象的'源码/字节码文件' |
JavaFileManager | 文件管理与输出控制 |
StandardJavaFileManager | 默认文件系统实现 |
Diagnostic / DiagnosticCollector | 编译错误、警告信息 |
FileObject | 更通用的文件抽象 |
三、核心接口详解
1. ToolProvider & JavaCompiler
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
关键说明
- 仅在 JDK 中可用
- 如果运行环境是 ,该方法返回

