Предупреждение Ant / сбой при отсутствии file / build.properties?

#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>