Java 为什么ant每次运行都编译所有类?
我更习惯于make,所以我不明白为什么ant在源代码没有更改的情况下重新编译类。我已经读到在使用泛型的某些情况下需要重新编译,但我不确定这对我的项目是否有必要 另外,在javac任务中,我设置了includeDestClasses=“true” 下面是我正在使用的一些目标Java 为什么ant每次运行都编译所有类?,java,ant,Java,Ant,我更习惯于make,所以我不明白为什么ant在源代码没有更改的情况下重新编译类。我已经读到在使用泛型的某些情况下需要重新编译,但我不确定这对我的项目是否有必要 另外,在javac任务中,我设置了includeDestClasses=“true” 下面是我正在使用的一些目标 <target name="init"> <mkdir dir="${build}"/> <mkdir dir="${dist}"/> </ta
<target name="init">
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
</target>
<target name="compile" depends="init,util,semantics" description=""/>
<target name="util" depends="" description="">
<javac destdir="${build}" classpath="project.class.path" debug="on" srcdir="${src}/util" includeDestClasses="true" source="1.5">
<classpath refid="project.class.path"/>
</javac>
</target>
根据我的经验,javac目标不会编译所有的类,只编译需要它的类,即使没有includeDestClasses属性。事实上,我通常设置两个(或更多)编译目标,一个执行完整编译(通过删除输出目录强制执行),另一个执行快速更新编译,很像javac行。您确定其中一个依赖项没有删除输出目录吗?您的src和dest目录不相等,因此ant无法有效地统计输出文件以进行比较
这是一个常见问题:
尝试修改
javac
任务的开始标记,以同时包含srcdir
属性和includes
属性:
我很确定,我只运行了一个子目标,时间戳都在dest dir中更新了。我使用的是1.7.0,而不是1.7.1。我只是在编辑了一个文件后尝试了一下,得到了一个“[javac]将1个源文件编译为…”如果没有includeDestClasses属性会发生什么?您的ant输出应该显示正在编译的文件数量。src和dest属性特别不同,以维护包层次结构。是的,当ant查找已更改的源文件时,它不会读取任何文件的内容,特别是,它不会读取任何类的包声明。相反,它根据类的文件名及其在源目录层次结构中的位置推断类的完全限定名。例如,您可能有一个类util.codec.Base64,其源代码位于${src}/util/codec/Base64.java,但您的javac任务推断其完全限定名为codec.Base64,因为您告诉它源代码层次结构的根位于${src}/util,而不是${src}。