2012-01-16 3 views
2

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

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

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

prop1 содержит свойство выглядит как:

mg.prop = ${mg2.prop} 

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

mg2.prop = Hello 

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

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

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

Если я бег

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

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

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

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

он показывает мне исходное значение.

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

ответ

1

Вот как я в конечном итоге решения этого - я turfed пользовательские задачи 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"/> 
3

От Ant руководства:

«Свойства неизменны:., Кто задает свойство первым замораживает его для остальной части сборки, они определенно не переменные»

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

+0

Благодаря Рассел - я видел это в руководстве, Я просто подумал, что пользовательская задача может решить эту проблему. Я решил это с помощью другого метода - см. Ниже. –

1

Вы также можете использовать var task из 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 --> 
Смежные вопросы