我正在尝试编写用于编译源文件夹的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
文件。
请帮帮我。
答案 0 :(得分:10)
据我所知,仅编译修改过的java文件是ant javac task的默认行为。 Ant使用.java文件的时间戳及其相应的.class文件来确定是否需要重新编译Java文件。我在很多项目中都使用它,从来没有问题。
以下是您可以查看的一些内容
您的源树目录结构是否与Java包匹配 结构体?请参阅Why does ant always recompile all my Java files?。这可能是常见问题解答中的第一个原因。
我看到您的compile
目标取决于init
目标? init
目标有什么作用?它取决于任何clean
目标还是清理.class文件?
你的蚂蚁版本是什么?你可以试试一个不同的蚂蚁版本,看看你是否还有同样的问题吗?
如果以上都没有解决您的问题,那么在编译之后,您是否可以手动检查.class文件时间戳并将其与相应的.java文件的时间戳进行比较?
答案 1 :(得分:1)
因此,如果您没有删除任何依赖任务中的classes目录,请说'clean',javac任务本身只编译已更改的java文件。它是javac任务提供的开箱即用功能。希望它有所帮助。