当依赖项发生更改时,如何使javac重新编译源文件?

5

在我使用javac进行增量构建时,我的项目似乎出现了运行时错误。这种工作流程受支持吗?例如,如果A.java依赖于B.java,并且修改了B.java,javac会重新编译A.java吗?

目前,我正在使用javac ant构建任务进行编译:

    <javac destdir="${classes.dir}"
            srcdir="${src.dir}"
            source="${javac.version}"
            debug="${javac.debug}"
            deprecation="${javac.deprecation}"
            includeantruntime="build.sysclasspath=last">
        <classpath refid="compile.classpath" />
        <classpath refid="junit.classpath" />
    </javac>
3个回答

8

由于您正在使用ant,请查看depend任务。


(注:此段内容为原文,无需翻译)

5
javac命令行编译器将编译命令行中给出的每个源文件,以及这些文件所依赖的所有内容,如果它们没有更新的类文件。而ant javac任务会尝试更加智能化,避免总是编译所有内容-它只重新编译那些已更改的文件(即比它们各自的类文件更新的文件)。这并不考虑某些类的依赖项可能已更改,因此其他类也需要重新编译的情况。depend任务旨在查找并删除所有依赖于您更改的类的类 - 在javac任务之前运行此任务,您应该就可以了。在我的当前项目中,我只需在测试出现问题时(当然,在任何生产部署之前)执行ant clean,它将删除所有类文件。

0

这取决于 B.java 中发生了什么变化。如果没有任何改变影响到类在 A 中的呈现方式,那么 javac 不需要重新编译 A.java 以使更改生效。

话虽如此,如果您看到旧代码被加载和运行,我会更怀疑部署/打包过程而不是编译过程。结果可能因人而异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接