Why does ant compile all classes each run?

2019-04-06 07:52发布

I'm more accustomed to make, so I'm confused why ant recompiles classes when the source hasn't been changed. I've read that there is a requirement to recompile in some cases where generics are used, but I'm not sure that this will be necessary for my project.

Also, in the javac task, I've set includeDestClasses="true"

Here's some of the targets I'm using

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

标签: java ant
3条回答
甜甜的少女心
2楼-- · 2019-04-06 08:11

Your src & dest directories are not equivalent, so ant is not able to effectively stat the output files to compare them.

This is an FAQ: http://ant.apache.org/faq.html#always-recompiles

查看更多
The star\"
3楼-- · 2019-04-06 08:18

In my experience the javac target will not compile all the classes, only the ones in need of it, even without the includeDestClasses attribute. In fact I usually set up two (or more) compile targets, one that does a complete compile (forced by deleting the output directory) and one that does a quick updating compile, much like your javac line. Are you sure that one of your dependencies isn't deleting the output directory?

查看更多
迷人小祖宗
4楼-- · 2019-04-06 08:21

Try modifying the opening tag of the javac task to include both a srcdir attribute and an includes attribute:

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

查看更多
登录 后发表回答