Подтвердить что ты не робот

Как разрешить файлу свойств Ant переопределить значение, установленное в другом?

У меня есть файл ant, который выполняет следующие действия:

<property file="project.properties" description="Project configuration properties"/>
<property file="build-defaults.properties" description="default build configuration."/>
<property file="build.properties" description="local build configuration overrides"/>

Я хочу установить значения по умолчанию в build -defaults.properties(который установлен в SCM), но позволяет разработчикам переопределять значения в локальных build.properties, чтобы они могли работать с локальными путями.

Проблема в том, что она, похоже, не работает; Я установил это, создал переопределение в build.properties, но значение моего пути остается единственным в build -defaults.properties. Как это сделать?

4b9b3361

Ответ 1

Первоначальная проблема с вашей настройкой заключается в том, что у вас есть теги build.properties и build-defaults.properties.

Ant Свойства устанавливаются один раз, а затем никогда не могут быть переопределены. Поэтому установка любого свойства в командной строке с помощью -Dproperty=value всегда будет переопределять все, что вы установили в файле; свойство установлено, и тогда ничто не может его переопределить.

Таким образом, вы хотите, чтобы это было настроено:

<property file="build.properties" description="local build configuration overrides"/>
<property file="project.properties" description="Project configuration properties"/>
<property file="build-defaults.properties" description="default build configuration."/>

Таким образом:

  • Все, что задано в командной строке, имеет приоритет над build.properties
  • Все, что задано в build.properties, переопределяет другие значения
  • и т.д.. вниз по линии.

Ответ 2

На самом деле свойства ant могут быть переопределены. Смотрите документацию свойство:

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

Одной из задач, способных переопределить значение свойства, является script. Также любая пользовательская задача может использовать этот бэкдор. Другие предложения находятся под вопросом ant свойство переопределения loadfile. Это противоречит духу ant и обычно не нужно. Но это хорошо знать, потому что у меня была противоположная проблема: почему значение свойства изменилось, хотя оно неизменно.

Вот примерная цель, использующая задачу script для изменения значения свойства. В нем показаны основные методы работы со свойствами. Все методы описаны в ant Api, который недоступен в Интернете. Вам необходимо загрузить ant Manual. В его каталоге api есть документация api.

  <target name="t1">
    <property name="a" value="one" />
    <script language="javascript">
      sProp = project.getProperty("a");
      sProp = sProp.replace("e", "ly");
      project.setProperty("a", sProp);
      project.setNewProperty("a", "new value");
    </script>
    <property name="a" value="two" />
    <echo>a=${a}</echo>
  </target>

Как легко настроить задачу script? Задача script, работающая с языком beanshell, немного сложна и нетривиальна, но она объясняется в этот ответ. Однако, как отметил Rebse, использование языка javascript поддерживается из коробки в jdk 6.

Ответ 3

Ant свойство не может быть перезаписано, если вы не используете макрос и javascript-плагин:

Шаг 1: определение макрофункции для перезаписывания свойства

 <!--overwrite property value-->
    <macrodef name="set" >
        <attribute name="name"/>
        <attribute name="value"/>
        <sequential>
            <script language="javascript">
                <![CDATA[
                project.setProperty("@{name}", "@{value}");
                ]]>
            </script>
        </sequential>
    </macrodef>

Шаг 2: используйте макрос в ant xml

<set
    name="your_target_property"
    value="your_value" or "${another_property}"     
</set>