Javac 用法记录

javac 用法

 

用法: javac <options> <source files>

其中, 可能的选项包括:

 -g                         生成所有调试信息

 -g:none                    不生成任何调试信息

 -g:{lines,vars,source}     只生成某些调试信息

 -nowarn                    不生成任何警告

 -verbose                   输出有关编译器正在执行的操作的消息

 -deprecation               输出使用已过时的 API 的源位置

 -classpath <路径>            指定查找用户类文件和注释处理程序的位置

  -cp<路径>                   指定查找用户类文件和注释处理程序的位置

 -sourcepath <路径>           指定查找输入源文件的位置

 -bootclasspath <路径>        覆盖引导类文件的位置

 -extdirs <目录>              覆盖所安装扩展的位置

 -endorseddirs <目录>         覆盖签名的标准路径的位置

 -proc:{none,only}          控制是否执行注释处理和/或编译。

 -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称;绕过默认的搜索进程

 -processorpath <路径>        指定查找注释处理程序的位置

  -d<目录>                    指定放置生成的类文件的位置

  -s<目录>                    指定放置生成的源文件的位置

 -implicit:{none,class}     指定是否为隐式引用文件生成类文件

 -encoding <编码>             指定源文件使用的字符编码

 -source <发行版>              提供与指定发行版的源兼容性

 -target <发行版>              生成特定 VM 版本的类文件

 -version                   版本信息

 -help                      输出标准选项的提要

  -A关键字[=值]                  传递给注释处理程序的选项

 -X                         输出非标准选项的提要

 -J<标记>                     直接将 <标记> 传递给运行时系统

 -Werror                    出现警告时终止编译

 @<文件名>                     从文件读取选项和文件名

 

通过上面的选项可以知道在编译过程中:

1) 由于我们的Android编码使用的是UTF-8,所以需要指定 -encoding UTF-8

2) 由于我们还需要指定生成特定VM版本的类文件,所以我们需要制定 -target 为1.7

3) 由于我们编译的是Android项目,所以需要另外Android的jar包,才能在编译过程中,避免引入错误,因此需要用到 -bootclasspath选项,引入响应android版本的jar包。

4) 由于我们需要制定编译后的class文件的输出位置,所以我们还需要用到 -d这个选项

因此,一般情况下我们编译一个安卓项目中的class文件的命令格式为:

javac -encoding <源文件使用的编码格式> -target <VM版本> -bootclasspath <覆盖引导类文件的位置> -d <指定放置生成的类文件的位置> <需要编译的java文件, 格式是: file1, file2>

 下面举一个例子,直接编译xiaoxuetu这个Android项目的java文件:

javac -encoding UTF-8 -source 1.6 -target 1.6 -bootclasspath D:\Java\adt-bundle-windows\sdk\platforms\android-10\android.jar -d E:\Workspaces\android\xiaoxuetu\xbin E:\Workspaces\android\xiaoxuetu\src\com\xiaoxuetu\*.java E:\Workspaces\android\xiaoxuetu\gen\com\xiaoxu
etu\*.java

 

### 如何通过 `javac` 设置 `-encoding` 参数以指定源码文件字符集 在 Java 中,可以通过 `javac` 命令的 `-encoding` 参数显式地指定源文件的字符编码。如果不指定该参数,默认会使用系统的默认字符集作为编译时的编码[^1]。 #### 使用方法 在命令行中调用 `javac` 时,可以在其他参数之前或之后添加 `-encoding` 参数并指定所需的编码名称。例如: ```bash javac -encoding UTF-8 Example.java ``` 上述命令表示将 `Example.java` 文件按照 UTF-8 字符集进行解析和编译。 #### 默认行为 如果没有提供 `-encoding` 参数,`javac` 将使用操作系统的默认字符集来解释源文件的内容。这可能导致在不同操作系统上编译同一份代码时出现乱码或其他错误,尤其是在源文件包含非 ASCII 字符的情况下。 #### 示例场景 假设有如下情况: - 源文件 `Test.java` 包含中文字符。 - 系统默认字符集为 GBK,而实际保存的文件编码为 UTF-8。 在这种情况下,不加 `-encoding` 参数可能会导致编译失败或者运行时显示乱码。因此需要明确指定编码方式: ```bash javac -encoding UTF-8 Test.java ``` 这样可以确保编译器能够正确读取和处理源文件中的多字节字符。 #### 获取当前系统字符集 为了验证系统默认字符集是否匹配目标编码,可以利用以下代码片段打印出 JVM 当前使用的字符集: ```java public class EncodingChecker { public static void main(String[] args) { System.out.println(System.getProperty("file.encoding")); // 输出当前系统字符集 } } ``` 此程序可以帮助开发者确认是否存在潜在的编码冲突问题。 #### 联系到其他选项的影响 需要注意的是,在复杂项目结构下可能还会涉及多个路径配置项共同作用于整个构建流程之中。比如 `-sourcepath`, `-bootclasspath` 和 `-extdirs` 都会影响类加载机制以及资源定位逻辑,进而间接影响最终生成的目标产物质量与兼容性表现[^4]。 另外关于调试信息保留方面也有专门针对变量表(var table),局部变量名列表(local variable name list)等元数据记录功能开关控制(-g[:lines|vars|source])可供选择启用与否以便后续排查分析工作更加便捷高效[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值