Javac 参考文档 #

1. 什么是 Javac #

Javac 是 Java 编程语言的编译器,负责将 Java 源代码文件(.java)编译为 Java 字节码文件(.class)。它是 Java Development Kit (JDK) 的核心工具之一,位于 JDK 安装目录的 bin 文件夹中。

2. 基本用法 #

2.1 简单编译 #

bash
javac HelloWorld.java

这将把 HelloWorld.java 编译为 HelloWorld.class 文件。

2.2 编译多个文件 #

bash
javac File1.java File2.java File3.java

或使用通配符:

bash
javac *.java

2.3 指定输出目录 #

使用 -d 选项指定编译后的 .class 文件输出目录:

bash
javac -d ./classes HelloWorld.java

3. 常用选项 #

3.1 类路径相关 #

选项 描述
-cp-classpath 指定编译时查找类文件的路径
-sourcepath 指定查找源文件(.java)的路径
-bootclasspath 指定引导类加载器使用的类路径
-extdirs 指定扩展类的目录

3.2 编译选项 #

选项 描述
-d <directory> 指定输出目录
-encoding <encoding> 指定源文件的字符编码
-source <release> 指定使用的源文件版本
-target <release> 指定生成的类文件的目标版本
-version 显示编译器版本信息
-help 显示帮助信息

3.3 调试与优化 #

选项 描述
-g 生成所有调试信息
-g:none 不生成调试信息
-g:{lines,vars,source} 只生成指定的调试信息
-O 启用优化(已过时,由 JVM 自动优化)

4. 高级功能 #

4.1 使用模块 #

Java 9+ 支持模块系统,使用 --module-path--add-modules 选项:

bash
javac --module-path ./lib -d ./classes --add-modules java.sql MyApp.java

4.2 注解处理 #

使用 -processor 选项指定注解处理器:

bash
javac -processor com.example.MyProcessor MyClass.java

4.3 增量编译 #

Javac 默认支持增量编译,只编译修改过的文件。可以使用 -Xprefer:newer 选项优化增量编译行为。

5. 示例 #

5.1 基本编译示例 #

bash
# 编译单个文件
javac HelloWorld.java

# 运行程序
java HelloWorld

5.2 使用类路径编译 #

bash
# 编译依赖于外部 JAR 的程序
javac -cp ./lib/commons-lang3.jar MyProgram.java

# 运行程序
java -cp ./lib/commons-lang3.jar:. MyProgram

5.3 编译并打包 JAR #

bash
# 编译到 classes 目录
javac -d ./classes *.java

# 创建 JAR 文件
jar cvf myapp.jar -C ./classes .

# 运行 JAR
java -jar myapp.jar

6. 编译错误常见类型 #

6.1 语法错误 #

text
HelloWorld.java:5: error: ';' expected
    System.out.println("Hello World")
                                     ^
1 error

6.2 类型错误 #

text
HelloWorld.java:5: error: incompatible types: int cannot be converted to String
    String message = 123;
                     ^
1 error

6.3 未找到类错误 #

text
HelloWorld.java:3: error: cannot find symbol
    System.out.println("Hello World");
           ^
  symbol:   variable out
  location: class System
1 error

7. 最佳实践 #

  1. 使用构建工具:对于复杂项目,建议使用 Maven、Gradle 等构建工具代替直接使用 javac
  2. 设置 CLASSPATH:合理设置类路径,避免类冲突
  3. 指定编码:始终使用 -encoding 选项指定源文件编码(如 UTF-8)
  4. 版本控制:使用 -source-target 选项控制 Java 版本兼容性
  5. 模块化设计:Java 9+ 中使用模块系统管理依赖

8. 命令行帮助 #

要查看完整的命令行选项列表,使用:

bash
javac -help

或查看详细文档:

bash
javac -X

9. 总结 #

Javac 是 Java 开发的基础工具,掌握其基本用法和常用选项对于 Java 程序员至关重要。虽然现代构建工具(如 Maven、Gradle)通常会隐藏底层的 javac 调用,但了解其工作原理仍有助于解决复杂的编译问题和优化构建过程。

最后更新:2026-02-05