Предлагает ли Ant способ обойти зависимость? - PullRequest
13 голосов
/ 17 декабря 2008

У build.xml есть цель test и цель build . Цель test , очевидно, зависит от цели build .

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

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

Ответы [ 5 ]

29 голосов
/ 17 декабря 2008

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

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

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

ant -Ddont.run.tests = true

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

Вот статья на обоих.

19 голосов
/ 17 декабря 2008

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

Вот что я делаю в своих проектах, чтобы решить эту проблему. Для каждой публичной цели я создам частную цель с «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>
4 голосов
/ 17 декабря 2008

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

2 голосов
/ 17 декабря 2008

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

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

0 голосов
/ 17 декабря 2008

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

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