javac 源码编译
javac
javac 是java语言编程编译器。全称java compiler。javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件。javac 可以隐式编译一些没有在命令行中提及的源文件。用 -verbose 选项可跟踪自动编译。
语法格式
javac 命令的使用语法格式如下:
javac [options] <sourcefiles>
各项的含义如下:
- javac: 表示要运行的Java编译器命令;
- options: 表示可选的参数选项。可以在这里指定不同的编译选项来控制编译过程的行为;
- <sourcefiles>: 表示要编译的源代码文件的名称或路径。这些源代码文件应该是以.java为扩展名源代码文件。
javac 命令支持许多可选参数来控制编译过程和生成的字节码文件。汇总全部的可选参数如下表:
参数 | 说明 |
---|---|
-g | 生成所有调试信息 |
-g:none | 不生成任何调试信息 |
-g: | 只生成某些调试信息 |
-nowarn | 不生成任何警告 |
-verbose | 输出有关编译器正在执行的操作的消息 |
-deprecation | 输出使用已过时的 API 的源位置 |
-classpath <路径> | 指定查找用户类文件和注释处理程序的位置 |
-cp <路径> | 指定查找用户类文件和注释处理程序的位置 |
-sourcepath <路径> | 指定查找输入源文件的位置 |
-bootclasspath <路径> | 覆盖引导类文件的位置 |
-extdirs <目录> | 覆盖所安装扩展的位置 |
-endorseddirs <目录> | 覆盖签名的标准路径的位置 |
-proc: | 控制是否执行注释处理和/或编译。 |
-processor [,,…] | 要运行的注释处理程序的名称; 绕过默认的搜索进程 |
-processorpath <路径> | 指定查找注释处理程序的位置 |
-parameters | 生成元数据以用于方法参数的反射 |
-d <目录> | 指定放置生成的类文件的位置 |
-s <目录> | 指定放置生成的源文件的位置 |
-h <目录> | 指定放置生成的本机标头文件的位置 |
-implicit: | 指定是否为隐式引用文件生成类文件 |
-encoding <编码> | 指定源文件使用的字符编码 |
-source <发行版> | 提供与指定发行版的源兼容性 |
-target <发行版> | 生成特定 VM 版本的类文件 |
-profile <配置文件> | 请确保使用的 API 在指定的配置文件中可用 |
-version | 版本信息 |
-help | 输出标准选项的提要 |
-A关键字[=值] | 传递给注释处理程序的选项 |
-X | 输出非标准选项的提要 |
-J<标记> | 直接将 <标记> 传递给运行时系统 |
-Werror | 出现警告时终止编译 |
@<文件名> | 从文件读取选项和文件名 |
可以看到命令所有的可选参数很多,读者可以根据上边表格选择所需参数来执行命令。下面主要介绍几个常用的参数:
-d <directory>: 指定编译后的字节码文件输出目录;
-classpath <path>: 指定编译时查找类、接口和包的路径;
-target <version>: 指定生成的字节码文件的目标 Java 版本;
-g: 生成用于调试的附加信息;
-proc:、-procpath、-processor:自定义“Annotation Processor”。
可选参数:-d
使用 -d 指定编译后字节码文件的输出目录。
x@demo-client % javac src/main/java/org/xian/client/XianService.java
x@demo-client % javac -d ../out/main_class_jar src/main/java/org/xian/client/XianService.java
不使用参数d,会在源码目录下产生一个class文件 ;
使用参数d,在指定目录下产生class文件 ;
可选参数:-classpath
用于指定编译时查找类、接口和包文件的路径。当源码中含有引用其他包的类时,需要使用该参数 ;
如果需要引用多个,在Linux中,用“:”分隔classpath,而在windows中,用“;”分隔。可选参数:-target
用于指定生成的Java字节码文件的目标版本。
javac -d ../out/main_class_jar -target 1.7 src/main/java/org/xian/client/XianService.java
通过使用 -target 选项,可以指定生成的字节码文件的目标版本,以确保与特定版本的Java运行时环境兼容。
可选参数:-g
使用-g选项来生成包含调试信息的字节码文件,以便在调试程序时进行更详细的跟踪和分析。
javac -d ../out/main_class_jar -g src/main/java/org/xian/client/XianService.java
javap 是 jdk 自带的反解析工具。它的作用就是根据 class 字节码文件,反解析出当前类对应的 code 区(字节码指令)、局部变量表、异常表和代码行偏移量映射表、常量池等信息。
javap -v XianServiceImpl.class > 2.txt
可选参数:-processor
-processor <CustomProcessor> :自定义注解处理器的类
-procpath:注解处理器的查找目录。
-proc:only:只运行注解处理器,而不编译源文件。
-proc:none:不使用注解处理器,只编译源文件。一般在Processor项目中,使用这个。
使用步骤:
-
编写一个Java注解处理器,该处理器需要实现javax.annotation.processing.AbstractProcessor类。
-
编写一个注解,该注解需要添加@Retention(RetentionPolicy.SOURCE)注解,以指示它只在源代码级别可见。
-
在Java源代码中使用注解。
-
将注解处理器编译成一个Jar文件,并将该Jar文件放在一个指定的目录中。
-
使用以下命令行选项来编译Java源代码:javac -processor MyProcessor -procpath /path/to/processor.jar MySourceCode.java
参考:https://blog.csdn.net/LVSONGTAO1225/article/details/131445014