Почему муравей компилирует все классы при каждом запуске? - PullRequest
9 голосов
/ 06 мая 2009

Я более привык делать, поэтому я запутался, почему 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 ]

9 голосов
/ 06 мая 2009

Попробуйте изменить начальный тег задания javac, чтобы он включал атрибут srcdir и атрибут includes:

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

7 голосов
/ 06 мая 2009

Ваши каталоги src & dest не эквивалентны, поэтому ant не может эффективно определить выходные файлы для их сравнения.

Это FAQ: http://ant.apache.org/faq.html#always-recompiles

1 голос
/ 06 мая 2009

По моему опыту, цель javac не скомпилирует все классы, только те, которые в ней нуждаются, даже без атрибута includeDestClasses. Фактически я обычно устанавливаю две (или более) цели компиляции, одну, которая выполняет полную компиляцию (принудительно удаляя выходной каталог), и другую, которая выполняет быстрое обновление компиляции, очень похоже на вашу строку javac. Вы уверены, что одна из ваших зависимостей не удаляет выходной каталог?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...