javac
javac是收录于JDK中的Java语言编译器。该工具可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。
| 開發者 | 昇陽電腦 (母公司甲骨文公司) | 
|---|---|
| 编程语言 | Java | 
| 操作系统 | 跨平台 | 
| 类型 | 编译器 | 
| 许可协议 | GPL | 
| 网站 | www | 
使用方法
    
若开发者使用IDE编写的源程序(扩展名为.java)必须遵从于“The Java Language Specification”,可手工编译或IDE编译。运行javac的实质便是命令行的调用:
- javac hello.java
即可生成对应的.class文件。这种文件遵从“The Java Virtual Machine Specification”。
需要注意的是,Java语言规范要求每个公共类所在的源代码文件的文件名与其类名相同,除非这个类是一个嵌套类,而class文件所包含的类必须和class文件的文件名相同,包括嵌套类。javac编译之后的class文件名会被自动命名为其中所包含的类的名字。
javac的命令行参数
    
javac [可按任意次序排列的options] [一个或多个要编译的sourcefiles] [一个或多个对源文件名进行列表的@files]
javac的具体帮助文档见:[1]
| 命令行 | 解释 | 
|---|---|
| @<filename> | 示例 | 
| -Akey[=value] | 传递给annotation processors的选项 | 
| --add-modules <module>(,<module>)* | Root modules to resolve in addition to the initial modules, or all modules on the module path if <module> is ALL-MODULE-PATH. | 
| --boot-class-path <path>, -bootclasspath <path> | 覆盖自举bootstrap class files的路径 | 
| --class-path <path>, -classpath <path>, -cp <path> | 指出在哪里搜索class files。它将覆盖CLASSPATH环境变量中的类路径 | 
| -d <directory> | 指出产生的class files放在哪里。如果产生的类是一个包的组成部分,则该class files放入对应于所在package的子目录中。必要时创建目录。若未指定 -d 选项,则 javac 将把class files放到与源文件相同的目录中。 | 
| -deprecation | 显示每种不被java语言规范鼓励使用或覆盖的成员或类的说明。没有给出 -deprecation 选项的话, javac将显示这类源文件的名称:这些源文件使用或覆盖不鼓励使用的成员或类。 -deprecation是-Xlint:deprecation的简写 | 
| -encoding <encoding> | 指出源文件的字符编码 | 
| -endorseddirs <dirs> | Override location of endorsed standards path | 
| -extdirs <dirs> | 覆盖installed extensions的位置 | 
| -g | 生成所有的调试信息,包括局部变量。缺省情况下,只生成行号和源文件信息。 | 
| -g:{lines,vars,source} | 生成某些调试信息,如源文件调试信息、行号调试信息、局部变量调试信息 | 
| -g:none | 不生成任何调试信息 | 
| -h <directory> | 指出在哪里放置生成的native header files | 
| --help, -help | 打印帮助信息 | 
| --help-extra, -X | 打印对额外选项的帮助信息 | 
| -implicit:{none,class} | 指出是否对implicitly referenced files生成class files。缺省值是class | 
| -J<flag> | 把<flag>直接传给runtime system | 
| --limit-modules <module>(,<module>)* | 限制可看到的modules的范围 | 
| --module <module-name>, -m <module-name> | 只编译指定的module,检查时间戳 | 
| --module-path <path>, -p <path> | 指出在哪里搜索modules | 
| --module-source-path <module-source-path> | 指出对多个人modules在哪里搜索源文件 | 
| --module-version <version> | 指出将被编译的module的版本 | 
| -nowarn | 不产生警告信息 | 
| -parameters | 生成元数据用于reflection方法参数。构造函数与方法的形参名被存储在生成的class file中,从而Reflection API的 java.lang.reflect.Executable.getParameters方法可以获取它们 | 
| -proc:{none,only} | 控制annotation processing 与/或编译被执行。none表示只编译无annotation processing;only只annotation processing无随后的编译 | 
| -processor <class1>[,<class2>,<class3>...] | 将要运行的annotation processing的名字;跳过默认的发现过程 | 
| --processor-module-path <path> | 指出一个module路径可以发现annotation processor | 
| --processor-path <path>, -processorpath <path> | 指出在哪里可以发现annotation processors | 
| -profile <profile> | 在指定的profile中被用的API是可利用的 | 
| --release <release> | 针对特定版本虚拟机编译。支持的目标版本: 10, 6, 7, 8, 9 | 
| -s <directory> | 指出在哪里存放被生成的source files | 
| -source <release> | 指出源代码遵从哪个版本的Java语言标准。必须大于5 | 
| --source-path <path>, -sourcepath <path> | 指定用来查找类或接口定义的源代码路径。与用户class path一样,源路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。注意:通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。 | 
| none | 覆盖系统module的位置 | 
| -target <release> | 生成将在指定版本的虚拟机上运行的类文件 | 
| --upgrade-module-path <path> | 覆盖upgradeable modules的位置 | 
| -verbose | 输出编译器正在做的事情。包括了每个所加载的类和每个所编译的源文件的有关信息 | 
| --version, -version | 版本信息 | 
| -Werror | 如果警告出现则停止编译 | 
参考文献
    
- . [2018-07-13]. (原始内容存档于2018-05-15).
外部链接
    
- The Compiler Group (页面存档备份,存于)
- JSR 199 (页面存档备份,存于) Java Compiler API Java Specification Request for invoking the Java compiler from a Java program
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.