我有以下班级结构:
Main Class: WordNet.java
WordNet.java uses SAP.java
SAP.java uses DeluxeBFS.java
当我运行命令时
$ javac WordNet.java
我回来了
WordNet.class
WordNet$Synset.class
SAP.class
DeluxeBFS.class
DeluxeBFS$markDist.class
Synset 和 markDist 是私有类。
但我不明白的是,为什么如果我在 DeluxeBFS 中进行更改并重新编译 WordNet,则该更改不会被编译。由于 WordNet 依赖于 DeluxeBFS,因此如果进行更改,java 编译器不应该重新编译它吗?看起来该文件甚至没有被触及。
不,编译器找到
DeluxeBFS
的类文件,这就是它的结束 - 它不会尝试寻找它的源代码(当然可能是 anywhere)。
一般来说,当您使用 javac 从命令行构建时,最好重新编译所有内容。
如果您想要增量编译来注意到哪些文件已更改等,您应该使用像 Eclipse 这样的 IDE。
您回答了自己的问题 - javac 不会重新编译所有依赖项,只会重新编译作为输入给出的文件。这实际上是一个优点 - 像 Eclipse 这样的 IDE 只会编译修改后的文件,而不是整个代码库