2009-01-31 4 views
15

У меня есть скрипт сборки, который выполняет ряд действий (свести к минимуму javascript, загрузить на amazon s3 и т. Д.). Задача минимизации ANT работает только на javascript, который я модифицировал, и игнорирует остальные (я не писал этот скрипт). Я хотел бы сделать что-то подобное для задачи amazon s3, в которую загружается только обновленный контент. Любые выводы о том, как это сделать, будут очень признательны.Как выполнить ANT-задачи только для файлов, которые были изменены

ответ

0

В общем случае вы можете сделать это для задач, имеющих исходные и целевые файлы, используя File Mappers, так что задача применяется только к исходным файлам, которые были изменены. Я не знаю, есть ли способ сделать что-то, где Ant не может видеть файлы назначения, такие как загрузка.

+0

Если я использую URL для актива в сценарии сборки будет эту работу? – Akeem

+0

Наверное, нет - я сомневаюсь, что Ant будет смотреть на удаленный пункт назначения, но тогда я этого не пробовал. –

0

Если вы не хотите изменять/переписывать задачу S3 и хотите оставаться чисто в XML, вы можете использовать Uptodate Task и теневую директорию для имитации этого поведения - например, сохраните копию своих загрузок (потенциально огромную) или просто пустой файл с датой создания в последний раз, когда вы загрузили. Примеры на странице руководства должны содержать много подсказок, куда идти.

Конечно, вы можете написать свою собственную задачу S2Uptodate, подключив ее к S3, чтобы сравнить даты. Предпочтительное решение зависит от количества файлов (например, нескольких огромных, в которых вы могли бы проверить каждый из них в отдельной операции или почти бесконечное количество маленьких, которые вы бы решали по-разному).

Вы также может быть вдохновлен использованием и элементами Xjc task, хотя это, конечно, работает исключительно с локальными файлами.

8

Вы можете выбрать набор файлов с измененным тегом даты. Модифицированный тег безумно мощный, поэтому проверьте его : Ant Selectors - Modified

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

<param name="commitUpdate" value="false" /> 
[...] 
<ftp ...> 
    <fileset dir="src"> 
     <modified delayupdate="${commitUpdate}" /> 
    </fileset> 
</ftp> 

И, конечно, вы можете установить эту commitUpdate с помощью командной строки паров или что-то.

1

Возможно, вы захотите рассмотреть задачу OutOfDate Ant, предоставленную библиотекой Ant-contrib. Это позволяет вам выполнить последовательную/параллельную задачу для каждого исходного файла в наборе файлов. Вы можете применить файл mapper для определения целевых файлов для проверки исходных файлов, так что только файлы, которые были изменены, запускают определенную последовательную/параллельную задачу.

Проверить эту SO нить:

How to execute an Ant task only when source files have been modified?

+0

В случае, если задачи не включают набор файлов, как, селектора мусора не помогают. –

Смежные вопросы