为什么ant编译每个运行的所有类?

时间:2009-05-06 01:06:12

标签: java ant

我更习惯于制作,所以我很困惑为什么ant在没有更改源时重新编译类。我已经读过在某些使用泛型的情况下需要重新编译,但我不确定这对我的项目是否有必要。

另外,在javac任务中,我设置了includeDestClasses =“true”

以下是我正在使用的一些目标

<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>

3 个答案:

答案 0 :(得分:9)

尝试修改javac任务的开始标记,以包含srcdir属性和includes属性:

<javac destdir="${build}" classpath="project.class.path" debug="on" srcdir="${src}" includes="util/**" includeDestClasses="true" source="1.5">

答案 1 :(得分:7)

你的src&amp; dest目录不等效,因此ant无法有效地统计输出文件以进行比较。

这是一个FAQ: http://ant.apache.org/faq.html#always-recompiles

答案 2 :(得分:1)

根据我的经验,即使没有includeDestClasses属性,javac目标也不会编译所有类,只需要编译需要它的类。事实上,我通常设置两个(或更多)编译目标,一个完成编译(通过删除输出目录强制执行)和一个快速更新编译目标,就像你的javac行一样。你确定你的一个依赖项没有删除输出目录吗?