Как выполнить задачи ANT только в файлах, которые были изменены
У меня есть сборка script, которая делает несколько вещей (свести к минимуму javascript, загрузить на amazon s3 и т.д.). Задача минимизации ANT работает только на javascript, который я модифицировал, и игнорирует остальные (я не писал этот script). Я хотел бы сделать что-то подобное для задачи amazon s3, в которую загружается только обновленный контент. Любые выводы о том, как это сделать, будут очень признательны.
Ответы
Ответ 1
Вы можете выбрать набор файлов с измененным тегом даты. Измененный тег безумно мощный, поэтому проверьте его: Ant Селекторы - изменено.
Чтобы узнать, что изменилось, он может хранить кеш в файле свойств, который обновляется после каждой успешной сборки, если вы не используете атрибут delayupdate, поэтому, возможно, для его проверки вы можете:
<param name="commitUpdate" value="false" />
[...]
<ftp ...>
<fileset dir="src">
<modified delayupdate="${commitUpdate}" />
</fileset>
</ftp>
И, конечно, вы можете установить этот commitUpdate через параметр командной строки или что-то в этом роде.
Ответ 2
Возможно, вы захотите рассмотреть OutOfDate Ant Задача, предоставленная библиотекой Ant -contrib. Это позволяет вам выполнить последовательную/параллельную задачу для каждого исходного файла в наборе файлов. Вы можете применить файл mapper для определения целевых файлов для проверки исходных файлов, так что только файлы, которые были изменены, запускают определенную последовательную/параллельную задачу.
Проверьте этот поток SO:
Как выполнить задачу Ant только при изменении исходных файлов?
Ответ 3
В общем, вы можете сделать это для задач с исходными и целевыми файлами с помощью File Mappers, так что задача применяется только к источнику файлы, которые были изменены. Я не знаю, есть ли способ сделать что-то, где Ant не может видеть файлы назначения, например, загрузку.
Ответ 4
Если вы не хотите изменять/переписывать задачу S3 и хотите оставаться чисто в XML, вы можете использовать Uptodate Task и теневой каталог, имитирующий это поведение - например сохраните копию своих загрузок (потенциально огромную) или просто пустой файл с датой создания в последний раз, когда вы загрузили. Примеры на странице руководства должны содержать много подсказок, куда идти.
Конечно, вы могли бы написать свою собственную задачу S2Uptodate, а также подключиться к S3 для сравнения дат. Предпочтительное решение зависит от количества файлов (например, нескольких огромных, где вы сможете проверить каждый из них в отдельной операции или почти бесконечное количество маленьких, которые вы бы решали по-другому.
Вы также можете вдохновиться Xjc task использованием и элементами, хотя это, конечно, работает исключительно с локальными файлами.