Предоставляет ли Ant способ обойти зависимость?

В файле build.xml есть тест и цель сборки. Очевидно, что цель тестирования зависит от цели сборки.

Как запустить тестовый объект, временно пропустить компиляцию, не изменяя файл build.xml?

Я спрашиваю, потому что компиляция слишком длинная и постоянно обновляется сервером непрерывной интеграции; и я преследую проблему с модульными тестами.

Ответы

Ответ 1

Нет, вы не можете пропустить его, не изменяя файл сборки.

Вот что я делаю в своих проектах для решения этой проблемы. Для каждой публичной цели я создам частную цель с "do-" перед ней. Частная цель не имеет никакой зависимости, а у публичной цели есть цель "do-" как зависимость.

Например:

<target name="compile" depends="init, do-compile" description="Compiles all of the source code" />

<target name="do-compile">
        <javac destdir="${classes.dir}" debug="true" encoding="ISO-8859-1">
            <src refid="src.path" />
            <include name="*.java" />
            <classpath refid="external.libraries.classpath" />
        </javac>
</target>

Ответ 2

Используйте атрибут unless.

<target name="test" unless="dont.run.tests">

Если вы не хотите запускать "тест", просто

ant -Ddont.run.tests = true

Он должен быть undefined, если вы хотите, чтобы тесты выполнялись. Ant просто проверяет, определен ли он вообще. Кроме того, существует атрибут if, который делает обратное.

Здесь статья на обоих.

Ответ 3

Лично я нашел материал зависимостей в Ant, чтобы получить больше, чем помогать. Обычно я устанавливаю два набора целей - те, которые на самом деле делают материал (без зависимостей), а затем цели, которые имеют только зависимости. Таким образом, вы можете легко запустить одну цель, и вы также можете легко запустить весь набор и т.д. Это соответствует практическим (а не идеологическим) использованию на мой взгляд.

Ответ 4

Хорошо написанная цель сборки не потребуется перестраивать что-либо, если код не изменился. Поэтому тот факт, что целевой тест зависит от него, должен быть в значительной степени неактуальным. Если вы дважды запускаете цель сборки и пытаетесь переделать что-то во второй раз, вам может потребоваться выяснить, почему это делается.

Простым способом избежать выполнения задачи является указание атрибута "если" целевого объекта на имя некоторого свойства. Если вы затем установите это свойство в командной строке при запуске Ant, он обходит эту цель.

Ответ 5

Просто "удалить" зависимость временно? Если код уже создан, все ваши файлы должны быть доступны, нет? - Упс, просто увидел, что вы не можете изменить файл, хм, почему бы вам сначала не запустить ту же работу локально?