javac_0">loong - Java 命令 - javac
javac命令用于将Java源代码编译成Java字节码文件(.class文件),以便在Java虚拟机(JVM)上运行。
基本语法
javac [options] source_file(s)
参数说明
- options:javac命令提供了多个选项来控制编译过程和生成的字节码文件的行为。可以使用javac -help查看所有选项及其说明。
- source_file(s):指定要编译的源代码文件的路径。可以使用通配符(*)来编译整个文件夹中的所有Java文件。例如,javac *.java会同时编译当前目录中的所有Java文件。
常用选项
-
-d directory:指定编译生成的.class文件的输出目录。
-
-classpath path:指定可供编译器使用的类路径。
-
-source version:指定要编译的Java源代码的版本(例如,-source 8表示使用Java 8的语言功能进行编译)。
-
-target version:指定要生成的字节码文件的Java版本(例如,-target 1.8表示要生成适用于Java 8的字节码文件)。
-
-Xlint:启用编译器警告消息。
-
-verbose:显示编译器的详细输出信息。
使用案例
前提
User.java 实体类结构
java">package a.b;
public class User {public String id;public String name;public int age;
}
javac_source_files_46">javac source_file(s)
# javac source_file(s)
# 会在HelloWorld.java 同一个文件夹下生成一个HelloWorld.class文件
javac User.java
结果
编译后的.class文件和源.java文件会在同包下
javac__d_dir_source_file_62">javac -d dir source_file
# javac -d target source_file(s)
# javac 源文件 -d 编译文件输出路径 :
# 编译源文件,并将编译后的 .class 文件 放到 -d 参数后的目标路径中;
# 例如 User.java 文件中 package a.b; 执行此命令会将.class文件放入对应的文件夹中(a文件夹下b文件夹下的User.class)
# 前提:target文件夹必须存在,否则会报错文件不存在,在User.java 所在文件夹下新建一个target文件夹
javac -d target User.java
#或者
javac -d . User.java
结果
javac_classpath_path_source_files_89">javac -classpath path source_file(s)
前提
Main.java 在 main包下,引用的User在a.b包下
java">package main;import a.b.User;
public class Main {public static void main(String[] args) {User user = new User();user.name = "moon";user.age = "7";System.out.println(user.name + "今年" + user.age + "岁");}}
使用 javac Main.java 命令直接编译会报错,因为Main.java 引用了User.java 但是其又找不到我们引用的User.java文件
D:\loong-log\main>javac Main.java
Main.java:3: 错误: 程序包a.b不存在
import a.b.User;^
Main.java:11: 错误: 找不到符号User user = new User();
所以执行javac的时候,如果想要从其他目录找到需要编译的文件,那么需要加参数-cp指定目录
方式一: javac -classpath …; Main.java
方式二: javac -classpath D:/loong-log Main.java
方式二: javac -cp D:/loong-log Main.java
解释: (以Main.java所在main包的上一层loong-log文件夹为根目录开始编译)
提示: 多个引入要使用:或者;分隔
结果
对应文件夹Java文件编译成功
javac_source__version_source_file_143">javac -source version source_file
指定要编译的Java源代码的版本
D:\loong-log\a\b>javac -source 8 User.java
java_target_version_source_file_155">java -target version source_file
定要生成的字节码文件的Java版本
例如: javac -target 1.8 User.java --> 指定生成的class文件适用jdk 1.8 环境
javac -target 1.8 User.java
javac_Xlint_source_file_167">javac -Xlint source_file
启用编译器警告消息。
javac -Xlint User.java
javac_verbose_source_file_175">javac -verbose source_file
显示编译器的详细输出信息。
D:\loong-log\a\b>javac -verbose User.java
[解析开始时间 RegularFileObject[User.java]]
[解析已完成, 用时 10 毫秒]
[源文件的搜索路径: .,C:\Program Files\Java\jdk-1.8\lib\dt.jar,C:\Program Files\Java\jdk-1.8\lib\tools.jar]
[类文件的搜索路径: C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar,C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar,C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar,C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar,C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar,C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar,C:\Program Files\Java\jdk-1.8\jre\classes,C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar,.,C:\Program Files\Java\jdk-1.8\lib\dt.jar,C:\Program Files\Java\jdk-1.8\lib\tools.jar]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]]
[正在检查a.b.User]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]]
[已写入RegularFileObject[User.class]]
[共 126 毫秒]