命令行
用法: 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 出现警告时终止编译
@<文件名> 从文件读取选项和文件名(多个Java文件写在此文件中)
参数说明
-g
-g
:在生成的class文件中包含所有调试信息(行号、变量、源文件)-g:none
:在生成的class文件中不包含任何调试信息。
这个参数在javac编译中是看不到什么作用的,因为调试信息都在class文件中,而我们看不懂这个class文件。
为了看出这个参数的作用,在IDE
中进行debug
实验。
- 加入“断点”,这个是靠
-g:lines
起作用,如果不记录行号,则不能加断点。 - 在“variables”窗口中查看当前的变量,如下图所示,这是靠
-g:vars
起作用,否则不能查看变量信息。 - 在多个文件之间来回调用,比如 A.java的main()方法中调用了B.java的fun()函数,而我想看看程序进入fun()后的状态,这是靠
-g:source
,如果没有这个参数,则不能查看B.java的源代码。
-bootclasspath、-extdirs
-bootclasspath
和-extdirs
几乎不需要用的,因为他是用来改变 “引导类”和“扩展类”。
- 引导类(组成Java平台的类):
${JAVA_HOME}\jdkk1.7.0_25\jre\lib\rt.jar
等,用-bootclasspath
设置。 - 扩展类:
${JAVA_HOME}\jdk1.7.0_25\jre\lib\ext
目录中的文件,用-extdirs
设置。 - 用户自定义类:用
-classpath
设置。
-sourcepath和-classpath(-cp)
-classpath(-cp)
指定你依赖的类的class文件的查找位置。在Linux中,用“:
”分隔classpath
,而在windows中,用“;
”分隔。-sourcepath
指定你依赖的类的java文件的查找位置。
如果依赖的类,既找到了.class
文件,也找到了.java
文件。则
- 内容一致,使用
.class
文件 - 内容不一致,使用
.java
文件,重新编译。
-proc:、-procpath、-processor
这3个参数是用来自定义“Annotation Processor
”的。
-processor <CustomProcessor>
:自定义注解处理器的类-procpath
:注解处理器的查找目录。-proc:only
:只运行注解处理器,而不编译源文件。-proc:none
:不使用注解处理器,只编译源文件。一般在Processor项目中,使用这个。