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项目中,使用这个。

使用步骤:

  1. 编写一个Java注解处理器,该处理器需要实现javax.annotation.processing.AbstractProcessor类。

  2. 编写一个注解,该注解需要添加@Retention(RetentionPolicy.SOURCE)注解,以指示它只在源代码级别可见。

  3. 在Java源代码中使用注解。

  4. 将注解处理器编译成一个Jar文件,并将该Jar文件放在一个指定的目录中。

  5. 使用以下命令行选项来编译Java源代码:javac -processor MyProcessor -procpath /path/to/processor.jar MySourceCode.java

参考:https://blog.csdn.net/LVSONGTAO1225/article/details/131445014

posted @ 2023-07-13 14:01  北feng  阅读(309)  评论(0编辑  收藏  举报