Могут ли свойства Ant разрешать другие свойства?

Можно ли установить свойства Ant через файл свойств, разрешить другие свойства из файлов свойств?

Например, я могу это сделать:

<property name="prop1" value="in_test_xml1" />
<property name="prop2" value="${prop1}" />

и prop2 становится "in_test_xml1". Это хорошо.

Но в этом случае при использовании файла свойств ввода:

prop1=sample_prop
prop2=${prop1}

prop2 не установлен в "sample_prop"

Таким образом, разрешение свойств других свойств, похоже, работает, когда свойство, выполняющее разрешение, находится в самом файле Ant.

Ожидается ли это, или я что-то не хватает?

Ответ 1

Ant поддерживает расширение свойств файла, см. раздел Файл свойств в руководстве для Property.

В следующем примере показаны свойства, разрешаемые:

  • в одном файле свойств
  • из одного файла свойств в другом файле свойств
  • в файле сборки

Первый файл свойств:

$ cat props1.properties
prop1=world
prop2=hello ${prop1}

Второй файл свойств:

$ cat props2.properties
prop3=goodbye ${prop1}

Файл сборки:

<project default="test">
  <property file="props1.properties"/>
  <property file="props2.properties"/>
  <property name="prop4" value="${prop3}, good luck"/>
  <target name="test">
    <echo message="prop1 = ${prop1}"/>
    <echo message="prop2 = ${prop2}"/>
    <echo message="prop3 = ${prop3}"/>
    <echo message="prop4 = ${prop4}"/>
  </target>
</project>

Вывод:

$ ant
Buildfile: build.xml

test:
     [echo] prop1 = world
     [echo] prop2 = hello world
     [echo] prop3 = goodbye world
     [echo] prop4 = goodbye world, good luck

BUILD SUCCESSFUL
Total time: 0 seconds

Есть ли другой вид разрешения собственности, который не работает для вас?

Edit

Следуя вашему комментарию, теперь я понимаю, что вы используете параметр командной строки -propertyfile для указания файла свойств для Ant для загрузки (а не для указания файла в самом файле сборки, как я уже говорил выше).

Я быстро проверил это и обнаружил, что Ant 1.7.1 не делал расширения свойств файла в файлах, загруженных с использованием этой опции командной строки. Но Ant 1.8.2.

Это Ant Ошибка 18732. Вы должны решить, обновив версию Ant.

Ответ 2

Более простым решением для этой задачи было бы использование Ant -contrib Задачи: Propertycopy.

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

<property name="org" value="MyOrg" />
<property name="org.MyOrg.DisplayName" value="My Organiziation" />
<propertycopy name="displayName" from="org.${org}.DisplayName" />

Sets displayName to "My Organiziation".