如何使用ANT仅编译已更改的源文件

时间:2013-02-28 06:20:49

标签: java performance ant compilation

我正在尝试编写用于编译源文件夹的ant build,这是我的脚本 target 用于编译。

 <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true">
            <classpath refid="master-classpath"/>
        </javac>

    </target>

在我的项目中,我有大约1000个.java个文件。当一个.java文件被更改时,目标往往会编译所有.java个文件。这使得开发非常缓慢。我只想知道是否有任何方法或代码来改变任务的行为,只编译修改或更改的.java文件而不是所有.java文件。

请帮帮我。

2 个答案:

答案 0 :(得分:10)

据我所知,仅编译修改过的java文件是ant javac task的默认行为。 Ant使用.java文件的时间戳及其相应的.class文件来确定是否需要重新编译Java文件。我在很多项目中都使用它,从来没有问题。

以下是您可以查看的一些内容

  1. 您的源树目录结构是否与Java包匹配 结构体?请参阅Why does ant always recompile all my Java files?。这可能是常见问题解答中的第一个原因。

  2. 我看到您的compile目标取决于init目标? init目标有什么作用?它取决于任何clean目标还是清理.class文件?

  3. 你的蚂蚁版本是什么?你可以试试一个不同的蚂蚁版本,看看你是否还有同样的问题吗?

  4. 如果以上都没有解决您的问题,那么在编译之后,您是否可以手动检查.class文件时间戳并将其与相应的.java文件的时间戳进行比较?

答案 1 :(得分:1)

因此,如果您没有删除任何依赖任务中的classes目录,请说'clean',javac任务本身只编译已更改的java文件。它是javac任务提供的开箱即用功能。希望它有所帮助。