Как разрешить файлу свойств 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. Как это сделать?
Ответы
Ответ 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>