Перезапись свойства ant из пользовательской задачи ant - PullRequest
2 голосов
/ 16 января 2012

Таким образом, общая проблема заключается в следующем:

У нас есть несколько файлов свойств

<property file="prop1"/>
<property file="prop2"/>

prop1 содержит свойство, похожее на:

mg.prop = ${mg2.prop}

prop2 содержит mg2.prop

mg2.prop = Hello

Если бы они были в одном файле, и я запросил mg.prop, я бы получил "Hello" обратно.Поскольку они находятся в отдельных файлах, это не работает (мне нужно загрузить prop1 перед prop2!)

Я написал специальную задачу ant, которая выполняет следующее:

String resolved = resolveProperty(propertyName);
getProject().setProperty(propertyName, resolved);

Если я запускаю

log("Resolved property value = " + getProject().getProperty(propertyName)); 

Сразу после этого я получаю правильное значение.

Однако в скрипте Ant, если я сделаю

<echo message="${mg.prop}"/> 

, он покажет мне исходное значение.

Есть мысли, как это решить?

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Из руководства Муравья:

"Свойства являются неизменяемыми: тот, кто устанавливает свойство первым, замораживает его до конца сборки; они, безусловно, не являются переменными."

http://ant.apache.org/manual/Tasks/property.html

В зависимости от вашей ситуации, вы можете достичь желаемого, загрузив prop1 дважды , используя loadproperties и цепочку фильтров, которая в первый раз занимает только строки , а не содержит "{mg2.prop}", а второй раз занимает только те строки, которые do содержат его.

http://ant.apache.org/manual/Tasks/loadproperties.html http://ant.apache.org/manual/Types/filterchain.html#linecontains

1 голос
/ 18 января 2012

Вы также можете использовать задачу var из ant-contrib для сброса значений.

Из документа:

Следующий пример показывает, что свойство устанавливается, отображается, сбрасывается и сбрасывается:

<property name="x" value="6"/>
<echo>${x}</echo>   <!-- will print 6 -->
<var name="x" unset="true"/>
<property name="x" value="12"/>
<echo>${x}</echo>   <!-- will print 12 -->
1 голос
/ 17 января 2012

Вот как я решил эту проблему - я настроил пользовательскую задачу ant.

Я закончил объединение всех файлов свойств в один, в обратном порядке приоритета.

Итак, если я хотел, чтобы свойства из 3.properties переопределяли свойства 2.properties и 1.properties, я сделал следующее:

<concat destfile="resolved.properties">
    <fileset file="1.properties" />
    <fileset file="2.properties" />
    <fileset file="3.properties" />
</concat>

<property file="resolved.properties"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...