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