我被告知javac
非常聪明,它不会重新编译.java
,条件是此.java
的时间戳在.class
之前。我发现它在我的机器中不能像那样工作,我在某处肯定是错的吗?
我的P.java
位于.../eg/access
下,P.java
被声明为访问权限
eg
|- access
|- P.class
|- P.java
然后当我运行javac P.java
时,每次重新编译时,这是正常还是我错了?
答案 0 :(得分:7)
默认情况下,Javac每次都会重新编译所有内容。您观察到的行为是正确的,并且是设计的。
看起来您可以为此行为指定一个选项:
<强> -Xprefer:{更新,源} 强>
指定在为类型找到源文件和类文件时要读取的文件。 (请参阅搜索类型)。如果使用 -Xprefer:newer ,它会读取类型的源文件或类文件的较新版本(默认值)。如果使用 -Xprefer:source 选项,则会读取源文件。如果要确保任何注释处理器可以访问使用SOURCE保留策略声明的注释,请使用 -Xprefer:source 。
取自:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html
您可能也在考虑Eclipse的编译器,我非常确定它会进行渐进式编译 - 或者是ant中的javac任务,它足够智能以找出这种情况。
答案 1 :(得分:5)
每次重新编译都是正常的。 javac不进行渐进式编译。
答案 2 :(得分:2)
我认为您可能会将javac
混淆为javac
task in Apache Ant的命令行可执行文件。 javac
始终重新编译源文件,无论它是旧文件还是比二进制文件更新。 Ant非常聪明,可以确定何时需要重新编译文件,但当然您必须使用Ant构建系统才能使用此功能。