Самый простой способ получить настоящие & # 8220; файловые задачи & # 8221; в АНТ
Вопрос
Я все еще хорошо изучаю, как использовать ANT, и я хотел понять, есть ли в нем какой-то разумный способ выполнять файловые задачи, аналогично Rake и Make:
http://martinfowler.com/articles/rake.html#FileTasks р>
" С файлом вы ссылаетесь на реальные файлы, а не на имена задач. Таким образом, «build / dev / rake.html» и «dev / rake.xml» являются фактическими файлами. HTML-файл - это результат этой задачи, а XML-файл - это входные данные. Вы можете думать о файловой задаче, как о том, как сообщить системе сборки, как создать выходной файл - действительно, это именно то, что нужно сделать в make - вы перечисляете нужные выходные файлы и говорите make, как их создать.
Важной частью файловой задачи является то, что она не запускается, если вам не нужно ее запускать. Система сборки просматривает файлы и запускает задачу только в том случае, если выходной файл не существует или его дата модификации предшествует входному файлу. Таким образом, файловые задачи работают очень хорошо, когда вы думаете о чем-то отдельно для каждого файла.
Другими словами, допустим, я хочу запустить собственный двоичный файл, и я хочу, чтобы этот двоичный файл запускался только в том случае, если какой-либо из файлов изменился. Это связано с этим вопрос, но я вообще не хочу запускать бинарный файл, а не только пропустить часть набора файлов (т.е. в наборе файлов есть только один, и я вообще не хочу, чтобы инструмент запускался).
Идеальное решение также было бы не слишком простым, а могло бы быть легко применено к любой цели - возможно, с использованием некоторого ANT JavaScript или пользовательской задачи?
Решение
Используйте задание ant-contrib outofdate . Он имеет именно те свойства, которые вы запрашиваете. Вот веб-сайт, посвященный публикации муравьев .
Вот шаблон того, как интегрировать его в вашу сборку:
<taskdef
resource="net/sf/antcontrib/antlib.xml"
>
<classpath>
<pathelement location="${ant-contrib.jar}"/>
</taskdef>
<outofdate>
<sourcefiles path="dev/rake.xml"/>
<targetfiles path="build/dev/rake.html"/>
<sequential>
... do your work here ...
... will only run if rake.html is older than rake.xml ...
</sequential>
</outofdate>