2012-05-08 2 views
3

В длинном сценарии Ant, у меня есть цель, которая называется примерно один раз в секунду. (Это, вероятно, не очень хорошо, но давайте принять его на данный момент.)
Я только хочу, чтобы он исполнялся, если его последнее фактическое исполнение было по крайней мере пять минут назад.Ant: Как сравнить временные метки?

Одна из идей для решения состоит в том, чтобы сохранить свойство lastRunTimestamp и сравнить текущее время с этим.

Проблема: Как сравнить временные метки в Ant?

Другим решением, которое также будет приветствоваться, является средство для выполнения цели только через определенные промежутки времени, чтобы проверка не требовалась.

Я использую Ant 1.7.1 и ant-contrib.

Любые идеи очень ценятся - спасибо!

ответ

2

Интересный вопрос, и тот, который немного сложнее ответить, чем я изначально думал.

Вы можете использовать <tstamp> задачу установить штамп времени в пять минут назад:

<tstamp> 
    <format property="time_stamp" 
     offset="-5" 
     unit="minutes" 
     pattern="MM/dd/yyyy hh:mm:ss aa"/> 
</tstamp> 

После того как вы эту метку времени, вы можете использовать LastModified состояние <condition> задачи, чтобы увидеть, если конкретный файл был обновлен с тех пор. Если у вас нет файла, вы можете использовать задачу <touch>, чтобы создать ее.

<condition property="has.been.modified"> 
    <islastmodified dateTime="${time_stamp}" mode="after"> 
     <file file="${touch.file}"/> 
    </islastmodified> 
</condition> 

Единственная проблема заключается в том, что свойства по умолчанию неизменяемы. После этого вы не можете их изменить. К счастью, вы используете ant-contrib, а ant-contrib позволяет вам изменить это с помощью переменной задачи.

+0

Прохладный, это должно сработать! Однако для этого требуется временный файл. Может быть, я могу создать временные метки, используя '', чем можно сравнить лексикографически как строки? Это уменьшит проблему для сравнения строк. Не знаю, как это сделать. –

+0

Нашли это: http://stackoverflow.com/questions/7412894/ant-strings-comparison, который в сочетании с вашим ответом подходит для хорошего решения. –

+0

Просто обнаружил, что '' является функцией Ant 1.8. В Ant 1.7 нужно искать альтернативные решения, такие как запись метки времени в файл. –

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