javac 命令,javac 命令是 Java programming language compiler 的简写。

概要

javac 的语法如下:

1
javac [ options ] [ sourcefiles ] [ classes ] [ @argfiles ]

参数可以在任何顺序。

  • options : 命令行参数
  • sourcefiles : 一个或者多个需要编译的原文件(MyJava.java)
  • classes : 要处理一个或多个类的注解( MyPackage.MyClass)
  • @argfiles : 一个或多个文件,该目录选项和源文件。

描述

javac 工具将 java 源代码编译成字节码。他也可以处理 java 源文件或者 class 文件中的注解。

有两种方式把源文件名字传到 javac:

  • 对于少数的源文件,简单地列出在命令行上的文件名。
  • 对于大量的源文件,在一个新文件当中列出文件的文件名,用空格或换行分隔。使用这个新文件的名字传入到 javac 当中,并且名字前面加上@字符。

源文件是以 .java 结尾的文件,字节码文件是 .class 结尾的文件,名且这2个文件的名字是对应的。例如,有个类叫 Test,那么原文件是 Test.java 编译后的文件是 Test.class。

内部类处理成附加的 class 文件。类文件的名字是组合了内部类和外部类的名字,例如:MyClass$MyInnerClass.class。

源文件可能是在对应包的目录树当中。例如,你将源代码放在 /workspace 下,包名是 com.mysoft.mypack.MyClass ,那么你的源文件应该在 /workspace/com/mysoft/mypack/MyClass.java 。

默认情况下,编译后的文件与源文件在同一个目录。你也可以使用 -d 参数来指定目录。

options

编译器有一组正在对当前的开发环境的支持,并会在以后的版本中支持的标准选项。一组额外的非标准的选项是特定于当前虚拟机和编译器实现的,并有可能在未来发生变化。非标准选项开始 -X。

标准选项

  • -A key[=value] : 选项传递给注释处理器。这些不被 javac 的直接解释的,但对于由单独的处理器使用的情况下。密钥必须由分离的一个或多个标识符“.” 。

  • -cp path or -classpath path : 指定查找用户类文件和(可选)的注解处理器和源文件。这个类路径覆盖 CLASSPATH 环境变量中的用户类路径。如果没有使用 -cp 或 -classpath 指定 CLASSPATH,则用户类路径为当前目录。

    • 如果没有指定 -sourcepath 选项,用户类路径也搜索源文件。
    • 如果没有指定 -processorpath 选项,类路径也搜索注释处理器。
  • -Djava.ext.dirs=directories : 覆盖安装扩展的位置。

  • -Djava.endorsed.dirs=directories : 覆盖认可的标准路径的位置。

  • -d directory : 设置 class 文件的输出目录。指定的目录必须是存在的。javac 不会创建它。如果类是包中的,javac 会自动创建他的子目录,如果你指定 -d /home/myclasses,并且有个类文件是 com.mypackage.MyClass,那么这个类文件的全路径是 /home/myclasses/com/mypackage/MyClass.class。

    • 注意:-d 参数指定的目录不会自动添加到用户 claapath 下。
  • -deprecation : 显示每个使用废弃成员或阶层或覆盖的说明。没有-deprecation , javac的显示,使用或替代过时的成员或类的源文件的内容摘要。 -deprecation 是 -Xlint:deprecation 的简写。

  • -encoding encoding : 设置编码方式。如果不指定平台使用默认的编码方式。

  • -endorseddirs directories : 覆盖认可的标准路径的位置。

  • -extdirs directories : 覆盖 ext 目录的位置。目录变量是目录的冒号分隔的列表。在指定的目录中的每个 JAR 文件中搜索类文件。发现所有 JAR 文件是自动的类路径的一部分。

  • -g : 生成所有调试信息,包括局部变量。默认情况下,只生成行号和源文件信息。

  • -g:none : 不产生任何调试信息。

  • -g:{keyword list} : 只生成某些类型的调试信息,用逗号分隔的关键字列表中指定。有效的关键字为:

    • source : 源文件调试信息
    • lines : 行号调试信息
    • vars : 局部变量调试信息
  • -help : 打印标准选项的概要。

  • -implicit:{class,none} : 控制生成的类文件的隐式加载的源文件。自动生成的类文件,使用 -implicit:class。为了抑制类文件生成,使用 -implicit:none。如果未指定此选项,默认是自动生成的类文件。在这种情况下,编译器会发出警告,如果产生任何这样的类文件时也做注释处理。如果此选项明确设置警告不会发出。

  • -Joption : 通过调用 javac 给 java 命令传递参数。例如: -J-Xms48m 设置启动内存48M。这是 -J 将选项传递给 Java 编写的底层虚拟机执行应用程序的共同约定。

  • -nowarn : 禁用警告消息。这具有相同的含义-Xlint:none。

  • -proc: {none,only} : 控制是否注释处理和/或编译完成。 -proc:none 指编译发生无注释处理。 -proc:only 意味着,只有标注处理完成,没有任何后续的编译。

  • -processor class1[,class2,class3…] : 注释处理器的名称来运行。这绕过默认的发现过程。

  • -processorpath path : 指定在哪里可以找到注释处理器;如果不使用此选项,在类路径中搜索处理器。

  • -s dir : 指定放置生成的源文件的目录。该目录必须已经存在; javac 的不会创建它。如果一个类是一个包的一部分,编译器通过子目录反映包名,会根据需要创建子目录。例如:指定 -s /home/mysrc,并且类是 com.mypackage.MyClass,那么源文件应该在 /home/mysrc/com/mypackage/MyClass.java。

  • -source release : 指定的源代码被接受的版本。允许发布以下值:1.3,1.4,1.5,5,1.6,6,1.7,7

  • -sourcepath sourcepath : 指定要搜索的类或接口定义的源代码路径。与用户类路径,源路径项用冒号(:)分隔,可以是目录,JAR 文件,或 ZIP 文件。如果包被使用,本地路径名的目录或档案中必须反映包名。

  • -verbose : 详细的输出。这包括每个类加载和编译每个源文件的信息。

  • -version : 打印版本信息。

  • -Werror : 终止编译,如果出现警告。

  • -X : 显示非标准选项和退出信息。

—EOF—