javac 是 Java 编译器,常用参数包括:-d 指定输出目录(需提前创建)、-source/-target 控制源码与字节码版本兼容性、-cp 指定类路径(支持通配符 *)、-verbose 和 -Xlint 启用详细输出与警告检查,可组合使用提升开发效率与代码质量。

javac 是 Java 的编译器命令,用于将 .java 源文件编译为 JVM 可执行的 .class 字节码文件。掌握常用参数能提升开发效率、控制编译行为、适配不同环境。
指定输出目录(-d)
编译生成的 .class 文件默认放在源文件所在目录,使用 -d 可指定输出根目录,推荐配合包结构使用。
- 若源文件含
package com.example;,执行javac -d ./out com/example/Hello.java,则Hello.class会生成在./out/com/example/下 - 目录不存在时,
javac不会自动创建父目录(如-d ./out/a/b而./out不存在,会报错),需提前创建或配合mkdir -p(Linux/macOS)或mkdir /p(Windows)
设置源码与目标字节码版本(-source 和 -target)
用于兼容老版本 JDK 或限制语言特性,避免高版本语法在低版本 JVM 上运行失败。
-
-source 8:允许使用 Java 8 语法(如 Lambda),但禁止 Java 9+ 特性(如模块声明) -
-target 8:生成的.class文件版本号为 52(对应 Java 8),可在 Java 8 及更高版本 JVM 运行 - 注意:
-source和-target应匹配或-target ≤ -source;不加时默认按当前 JDK 版本处理
指定类路径(-cp 或 -classpath)
告诉编译器去哪里找被引用的类(如第三方 JAR 或自定义类),尤其在编译依赖其他模块的代码时必需。
立即学习“Java免费学习笔记(深入)”;
- 格式:
javac -cp "lib/commons-lang3.jar:src" Main.java(Linux/macOS,用冒号分隔) - Windows 写法:
javac -cp "lib\commons-lang3.jar;src" Main.java(用分号) - 当前目录可用
.表示,如-cp ".:lib/*"(Java 6+ 支持通配符*匹配 JAR,但不递归子目录)
启用详细输出与警告(-verbose、-Xlint)
辅助排查编译问题,尤其适合 CI 环境或团队协作中统一代码规范。
-
-verbose:打印编译过程中的类加载、输入输出文件等详细信息 -
-Xlint:开启全部编译期警告(如未用变量、过时 API、空指针隐患等) - 可指定具体警告类型,如
-Xlint:deprecation(仅报告已弃用 API 使用)、-Xlint:unchecked(泛型类型擦除相关) - 搭配
-Werror可将所有警告视为错误,强制修复后才能编译通过
实际使用中常组合多个参数,例如:javac -source 11 -target 11 -d ./bin -cp ".:lib/*" -Xlint:all -Werror src/com/example/App.java
不复杂但容易忽略 —— 参数顺序一般不影响结果,但 -d 和 -cp 后必须紧跟路径,且路径含空格时需用英文引号包裹。










