не может сбросить свойства с помощью ant-contrib при загрузке двух файлов свойств экстента - PullRequest
1 голос
/ 25 января 2012

Итак ... У меня есть build.xml, который загружает файл свойств из basedir.

Затем, в качестве цели, я выполняю следующее:

<var name="Var1" value="<property_from_**first**_loaded_property_file>" />
<var name="<property_from_**first**_loaded_property_file>" unset="true"/>
<property file="../<other directory>/<**second**_property_file>.properties" />
<var name="Var2" value="<property_from_**second**_loaded_property_file>"/>

Суть здесь в том, что обаимеет такое же имя свойства.Его нельзя изменить.

Итак, в конце я должен получить свойство, подобное:

Var1=<property_from_**first**_loaded_property_file>

Var2=<property_from_**second**_loaded_property_file>

Но вместо этого - я получаю признаки того, что свойство (Var1) из первого файла свойствне сбрасывается, а затем заполняется новым значением из второго файла свойств.То, с чем не работает муравейник, должно иметь дело: / ... что-то вроде:

Var1 = Var2

Почему я не получаю ожидаемый результат?

Ответы [ 3 ]

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

Я думаю, что проблема в том, что, хотя вы загружаете переменную в antcontrib var, сначала это все еще муравей property, то есть неизменный.

Я знаю, что вы не можете изменить файлы свойств, но какая у вас свобода с самим сценарием? Вы можете попытаться использовать правила области видимости и задачу antcallback для определения области загрузки переменных.

Например, следующие достижения - хотя и несколько сумбурные - то, что я думаю, вы ищете:

<?xml version="1.0" encoding="utf-8"?>
<project name="Test" basedir=".">

    <path id="ant.classpath">
        <fileset dir="${basedir}">
            <include name="ant-contrib_AP.jar"/>
        </fileset>
    </path>

    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="ant.classpath"/>

    <target name="test">

        <antcallback target="load-more-prop" return="Var2"/>

        <loadproperties>
            <file file="prop1.properties"/>
        </loadproperties>

        <property name="Var1" value="${var}" />

        <echo>${Var1}</echo>
        <echo>${Var2}</echo>

    </target>

    <target name="load-more-prop">

        <loadproperties>
            <file file="prop2.properties"/>
        </loadproperties>

        <property name="Var2" value="${var}" />
    </target>
</project>

В моей консоли я вижу:

Buildfile: C:\Users\mfelzani\workspace-junk\junk\build.xml
test:
load-more-prop:
 [echo] 7
 [echo] 1
BUILD SUCCESSFUL
Total time: 905 milliseconds

Что соответствует значениям, которые я установил в prop1.properties и prop2.properties, соответственно, для свойства var.

0 голосов
/ 01 февраля 2012

Если вам нужно перезаписать какое-либо существующее свойство или свойство пользователя (эти свойства определены через командную строку ant
параметр -Dkey = значение), вы можете использовать Flaka плагина Ant в качестве альтернативыдля antcontrib.
С помощью задачи Flaka let вы либо создаете новое свойство, либо просто перезаписываете любое существующее свойство:

<project xmlns:fl="antlib:it.haefelinger.flaka">

 <property name="foo" value="bar"/>

 <!-- create new property -->
 <fl:let>foo := 'baar'</fl:let>
 <echo>$${foo} => ${foo}</echo>

 <!--
  overwrite existing property
  notice the double '::' in foo ::= 'baz'
 -->
 <fl:let>foo ::= 'baz'</fl:let>
 <echo>$${foo} => ${foo}</echo>

</project>
0 голосов
/ 25 января 2012

Вы не можете сбросить значение.

WRONG: <var name="<property_from_**first**_loaded_property_file>" unset="true"/>

Вы должны сбросить переменную

CORRECT: <var name="Var1" unset="true"/>
...