Самый простой способ иметь настоящие «файловые задачи» в ANT - PullRequest
2 голосов
/ 26 октября 2009

Я все еще учусь, как правильно использовать ANT, и я хотел понять, есть ли в нем какой-то разумный способ делать файловые задачи, похожий на Rake and Make:

http://martinfowler.com/articles/rake.html#FileTasks

"С файлом вы ссылаетесь на фактические файлы, а не на имена задач. Так что 'build / dev / rake.html' и 'dev / rake.xml' являются реальными файлами. HTML-файл является результатом этой задачи и XML-файл - это входной файл. Вы можете думать о файловой задаче как о том, как сообщить системе сборки, как создать выходной файл - действительно, это именно то, что нужно сделать в make - вы перечисляете нужные выходные файлы и сообщаете make, как их создать.

Важной частью файловой задачи является то, что она не запускается, если вам не нужно ее запускать. Система сборки просматривает файлы и запускает задачу только в том случае, если выходной файл не существует или его дата модификации предшествует входному файлу. Таким образом, файловые задачи работают очень хорошо, когда вы думаете о чем-то отдельно для каждого файла. "

Другими словами, допустим, я хочу запустить собственный двоичный файл, и я хочу, чтобы этот двоичный файл запускался только в том случае, если какой-либо из файлов изменился. Это связано с этим вопросом, но я вообще не хочу запускать бинарный файл, а не только пропустить часть набора файлов (т. Е. Есть только один в наборе файлов, и я не хочу инструмент для запуска на всех).

Идеальное решение также было бы не слишком сложным, а могло бы быть легко применено к любой цели - возможно, с использованием некоторого ANT JavaScript или пользовательской задачи?

1 Ответ

1 голос
/ 26 октября 2009

Использовать Ant-contrib outofdate task . Он имеет именно те свойства, которые вы запрашиваете. Вот веб-сайт ant-contrib .

Вот шаблон для его интеграции в вашу сборку:

<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>
...