2

有人告诉我javac,它足够聪明,不会重新编译.java,条件是它.java的时间戳早于.class. 我只是发现它在我的机器上不起作用,我肯定在某个地方错了吗?

myP.java位于 下.../eg/accessP.java声明为访问包

eg 
 |- access 
      |- P.class
      |- P.java

那么当我运行时javac P.java,每次都重新编译,这是正常的还是我错了?

4

3 回答 3

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 任务,它足够聪明,可以找出这种情况。

于 2011-11-25T15:43:57.077 回答
5

每次都重新编译是正常的。javac 不进行增量编译。

于 2011-11-25T15:40:59.303 回答
2

我认为您可能会将javac命令行可执行文件与javacApache Ant 中的任务混淆。javac总是重新编译源文件,无论它比二进制文件旧还是新。Ant 足够聪明,可以判断何时必须重新编译文件,但当然您必须使用 Ant 构建系统才能使用此功能。

于 2011-11-25T15:43:35.937 回答