7

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

 <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文件。

请帮我。

4

2 回答 2

11

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

您可以检查以下几点

  1. 您的源代码树目录结构是否与您的 Java 包结构匹配?请参阅为什么 ant 总是重新编译我所有的 Java 文件?. 这可能是第 1 个原因,因为它在常见问题解答中。

  2. 我看到你的compile目标取决于init目标?init目标是做什么的?它是否取决于任何clean目标或是否清理 .class 文件?

  3. 你的蚂蚁版本是什么?你可以尝试不同的ant版本,看看你是否仍然有同样的问题?

  4. 如果以上都没有解决你的问题,编译后,你可以手动检查.class文件的时间戳,并与对应的.java文件的时间戳进行比较吗?

于 2013-02-28T06:52:25.720 回答
1

因此,如果您不删除任何依赖任务中的类目录,请说“清理”,javac 任务本质上只编译更改的 java 文件。这是 javac 任务提供的开箱即用功能。希望能帮助到你。

于 2016-01-03T12:01:21.470 回答