JAVAC 命令详解
结构
javac [ options ] [ sourcefiles ] [ @files ]参数可按任意次序排列。
options
- 命令行选项。
sourcefiles
- 一个或多个要编译的源文件(例如 MyClass.java)。
@files
- 一个或多个对源文件进行列表的文件。
说明
javac
有两种方法可将源代码文件名传递给 javac:
- 如果源文件数量少,在命令行上列出文件名即可。
- 如果源文件数量多,则将源文件名列在一个文件中,名称间用空格或回车行来进行分隔。然后在 javac 命令行中使用该列表文件名,文件名前冠以 @ 字符。
源代码文件名称必须含有
.java
后缀,类文件名称必须含有.class
后缀,源文件和类文件都必须有识别该类的根名。例如,名为MyClass
的类将写在名为MyClass.java
的源文件中,并被编译为字节码类文件MyClass.class
。内部类定义产生附加的类文件。这些类文件的名称将内部类和外部类的名称结合在一起,例如
MyClass$MyInnerClass.class
。应当将源文件安排在反映其包树结构的目录树中。例如,如果将所有的源文件放在 /workspace 中,那么
com.mysoft.mypack.MyClass
的代码应该在 \workspace\com\mysoft\mypack\MyClass.java 中。缺省情况下,编译器将每个类文件与其源文件放在同一目录中。可用 -d 选项(请参阅后面的选项)指定其它目标目录。
工具读取用 Java 编程语言编写的类和接口定义,并将它们编译成字节码类文件。
查找类型
当编译源文件时,编译器常常需要它还没有识别出的类型的有关信息。对于源文件中使用、扩展或实现的每个类或接口,编译器都需要其类型信息。这包括在源文件中没有明确提及、但通过继承提供信息的类和接口。
例如,当扩展 java.applet.Applet 时还要用到 Applet 的祖先类:java.awt.Panel 、 java.awt.Container、 java.awt.Component 和 java.awt.Object。
当编译器需要类型信息时,它将查找定义类型的源文件或类文件。编译器先在自举类及扩展类中查找,然后在用户类路径中查找。用户类路径通过两种途径来定义:通过设置 CLASSPATH 环境变量或使用 -classpath 命令行选项。(有关详细资料,请参阅设置类路径)。如果使用 -sourcepath 选项,则编译器在 sourcepath 指定的路径中查找源文件;否则,编译器将在用户类路径中查找类文件和源文件。可用-bootclasspath 和 -extdirs 选项来指定不同的自举类或扩展类;参阅下面的联编选项。
成功的类型搜索可能生成类文件、源文件或两者兼有。以下是 javac 对各种情形所进行的处理:
- 搜索结果只生成类文件而没有源文件: javac 使用类文件。
- 搜索结果只生成源文件而没有类文件: javac 编译源文件并使用由此生成的类文件。
- 搜索结果既生成源文件又生成类文件: 确定类文件是否过时。若类文件已过时,则 javac 重新编译源文件并使用更新后的类文件。否则, javac 直接使用类文件。
缺省情况下,只要类文件比源文件旧, javac 就认为它已过时。( -Xdepend 选项指定相对来说较慢但却比较可靠的过程。)
javac注意: javac 可以隐式编译一些没有在命令行中提及的源文件。用 -verbose 选项可跟踪自动编译。