Очистка муравья, если не обновление - PullRequest
2 голосов
/ 16 февраля 2011

В ANT у меня есть файл сборки с этими целями:
INIT <-- CLEAN <-- COMPILE <-- TEST

Я бы хотел сохранить среду сборки в чистоте, удалив ненужные файлы из предыдущих сборок.
Проблема в том, что на этапе тестирования я хочу проверить, обновлены ли источники тестов с помощью классов тестирования, поэтому я не запускаю тесты. Чтобы проверить, что мне нужно сравнить последние классы сборки с исходными файлами, вот так:

<uptodate property="tests.unnecessary">
    <srcfiles dir="src" includes="**/*.java"/>
    <mapper type="glob" from="*.java" to="${build.dir}/classes/*.classes"/>
</uptodate>

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

Как я могу это сделать?

1 Ответ

4 голосов
/ 16 февраля 2011

Ваш пример задачи uptodate близок - вам, вероятно, нужно настроить маппер и позаботиться об абсолютных и относительных путях.Возможно:

<uptodate property="tests.unnecessary">
    <srcfiles dir="src" includes="**/*.java"/>
    <mapper type="glob" from="*.java" to="../${build.dir}/classes/*.class"/>
</uptodate>

Обратите внимание на .. в атрибуте mapper to= - предположительно, build.dir находится на том же уровне в иерархии каталогов, что и src.Также обратите внимание, что скомпилированные классы имеют расширение .class, а не «.classes».

После того, как вы запустите выше, вы можете использовать if/unless атрибуты Ant target контролировать исполнение.Существует ряд подходов, наиболее базовым из которых может быть что-то вроде ниже.При запуске ant test Ant определит, устарели ли какие-либо файлы, и пропустит очистку, компиляцию и проверку, если нет.Другой подход может состоять в том, чтобы вызвать серию целевых вызовов из одной цели, используя antcall task .

<target name="check" depends="init">
    <uptodate property="tests.unnecessary">
        <srcfiles dir="src" includes="**/*.java"/>
        <mapper type="glob" from="*.java" to="${build.dir}/classes/*.class"/>
    </uptodate>
</target>

<target name="init">
    <echo message="Running init" />
</target>

<target name="clean" depends="check" unless="tests.unnecessary">
    <echo message="Running clean" />
</target>

<target name="compile" depends="clean" unless="tests.unnecessary">
    <echo message="Running compile" />
</target>

<target name="test" depends="compile" unless="tests.unnecessary">
    <echo message="Running test" />
</target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...