有人告诉我javac
,它足够聪明,不会重新编译.java
,条件是它.java
的时间戳早于.class
. 我只是发现它在我的机器上不起作用,我肯定在某个地方错了吗?
myP.java
位于 下.../eg/access
,P.java
声明为访问包
eg
|- access
|- P.class
|- P.java
那么当我运行时javac P.java
,每次都重新编译,这是正常的还是我错了?
默认情况下,Javac 每次都会重新编译所有内容。您观察到的行为是正确的,并且是设计使然。
看起来您可以为此行为指定一个选项:
-Xprefer:{较新,来源}
当找到一个类型的源文件和类文件时,指定要读取的文件。(请参阅搜索类型)。如果使用-Xprefer:newer,它会读取较新的源文件或类文件的类型(默认)。如果使用-Xprefer:source选项,它会读取源文件。当您想确保任何注释处理器都可以访问使用 SOURCE 保留策略声明的注释时,请使用-Xprefer:source 。
取自:http ://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html
您可能还会想到 Eclipse 的编译器,我很确定它会进行增量编译 - 或者 ant 中的 javac 任务,它足够聪明,可以找出这种情况。
每次都重新编译是正常的。javac 不进行增量编译。
我认为您可能会将javac
命令行可执行文件与javac
Apache Ant 中的任务混淆。javac
总是重新编译源文件,无论它比二进制文件旧还是新。Ant 足够聪明,可以判断何时必须重新编译文件,但当然您必须使用 Ant 构建系统才能使用此功能。