Ant и доступная задача - что, если что-то недоступно?
Вопрос
Когда я использую задачу, свойству присваивается значение TRUE только в том случае, если ресурс (скажем, файл) доступен.Если нет, то свойство не определено.
Когда я печатаю значение свойства, оно выдает значение true, если ресурс был доступен, но в противном случае просто выводит имя свойства.
Есть ли способ присвоить свойству некоторое значение, если ресурс нет доступно?Я попытался установить свойство явно перед проверкой доступности, но затем ant жалуется:
[available] DEPRECATED - used to override an existing property. [available] Build file should not reuse the same property name for different values.
Решение
Вы можете использовать условие в сочетании с not:
http://ant.apache.org/manual/Tasks/condition.html
<condition property="fooDoesNotExist">
<not>
<available filepath="path/to/foo"/>
</not>
</condition>
Другие советы
<available filepath="/path/to/foo" property="foosThere" value="true"/>
<property name="foosThere" value="false"/>
Назначение foosThere будет успешным только в том случае, если для него еще не было установлено значение true при проверке доступности.
Причиной такого поведения являются атрибуты if / unless в целевых объектах.Целевой объект с таким атрибутом будет выполнен, если / если не задано свойство с таким именем.Если для него установлено значение false или true, это не имеет значения.Таким образом, вы можете использовать available-task, чтобы установить (или нет) свойство и на основе этого выполнить (или нет) задачу.Установка свойства перед доступной задачей не является решением, поскольку свойства в ant неизменяемы, они не могут быть изменены после установки.
Существует три возможных решения: присвоить свойству значение, если оно не было задано ранее:
- Вы используете доступную задачу в сочетании с not.
- Вы создаете задачу, устанавливающую свойство, которое будет выполнено только в том случае, если свойство не задано (если только-атрибут задачи).
- Вы просто устанавливаете свойство после звонок доступен.Поскольку свойство будет изменено только в том случае, если оно не задано, это будет делать то, что вы хотите.