我正在尝试编写用于编译源文件夹的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文件。

请帮我。

最佳答案

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

您可以检查以下几件事

  • 您的源树目录结构是否与Java软件包匹配
    结构体?请参阅Why does ant always recompile all my Javafiles?。这可能是数字1的原因,因为它在常见问题解答中。
  • 我看到您的compile目标取决于init目标吗? init目标有什么作用?它是否取决于任何clean目标还是清理.class文件?
  • 您的ant版本是什么?您可以尝试使用其他版本的ant来查看是否仍然存在相同的问题吗?
  • 如果以上方法都不能解决您的问题,那么在编译之后,您是否可以手动检查.class文件的时间戳并将其与相应.java文件的时间戳进行比较?
  • 07-24 19:13
    查看更多