#ant #build-process
#ant #процесс сборки
Вопрос:
Задача My teams ant извлекает информацию о разработчике из build.properties
файла с помощью тега property file:
<property file="${user.home}/build.properties.txt" />
Однако, когда этот файл отсутствует, ant продолжается независимо. Позже в процессе сборки он пытается получить доступ к свойствам, которые не были определены, и пытается войти на сервер svn как ${user.name}
и другие подобные ошибки. Эти ошибки было довольно сложно отлаживать, поскольку некоторые из задач ant, которые я использовал, не выдавали полезных сообщений об ошибках.
Мой основной вопрос таков: Есть ли способ попросить ant быстро выполнить сбой, если он не может найти файл свойств?
Ответ №1:
Я думаю, вы можете объединить available и fail:
Задает свойство, если файл присутствует
<available file="${user.home}/build.properties.txt" property="build.properties.present"/>
Сбой, если свойство не задано
<fail unless="build.properties.present"/>
Комментарии:
1. Боже. Ты тоже меня победил. Хотя лично я предпочитаю не устанавливать дополнительные свойства, если только я не собираюсь часто их проверять.
2. @developmentalinsanity Я бы тоже предпочел ваше решение 🙂
3. Я думаю, что приму этот ответ, когда это позволит мне, однако вместо установки свойства build.properties.present я решил протестировать свойство, которое должно всегда существовать в файле (и, честно говоря, это основная поддержка, которая требуется от этого файла). Я чувствую, что это чище, поскольку позволяет мне
-Drequired.prop=val
из командной строки в ситуациях, когда вы не хотели бы создавать prop-файл (где бы он ни находился).
Ответ №2:
Вы могли бы сначала добавить явную проверку. Что-то вроде:
<fail message="Missing build.properties">
<condition>
<not>
<available file="${user.home}/build.properties.txt" />
</not>
</condition>
</fail>
вероятно, помогло бы.
Комментарии:
1. Хотя это более правильный ответ на вопрос, который я изначально задал (проверка на существование файла), решение @oers по тестированию свойств, установленных в файле, на мой взгляд, является более чистым решением. Спасибо.
Ответ №3:
Я предлагаю, вместо проверки наличия определенного файла свойств, проверить определение свойства. Таким образом, это свойство может быть предоставлено различными способами (например, как -Duser.name=myname
).
Вы можете указать предлагаемое имя файла в сообщении об ошибке.
Например
<fail message="user.name property is not set.
It is usually defined in ${user.home}/build.properties.txt">
<condition>
<not><isset property="user.name"/></not>
</condition>
</fail>
Комментарии:
1. Спасибо, я использовал предложенный синтаксис @oers для реализации этой идеи. Я отметил это в комментариях к его ответу,
-D
синтаксис может быть очень полезен для cronjobs и т.д. итак, я одобряю этот метод.
Ответ №4:
Используйте целевую муравьиную задачу «loadproperties» вместо «property file =»…»>, потому что последняя задача не жалуется, если файл отсутствует, что в вашем случае. Задача loadproperties всегда завершит сборку с ошибкой в такой ситуации, когда свойства отсутствуют.
Ответ №5:
или еще короче с плагином Ant Flaka =
<project xmlns:fl="antlib:it.haefelinger.flaka">
...
<fl:fail message="Houston we have a problem" test="!'${user.home}/build.properties.txt'.tofile.exists"/>
...
</project>