Может ли Ant расширять переменные среды из файла свойств?

У меня есть вопрос относительно Ant и его обработки переменных окружения. Для иллюстрации у меня есть небольшой образец.

С учетом файла сборки Ant test.xml:

<project name="myproj" default="testProps">

    <property environment="env"/>

    <target name="testProps">
            <echo message="${env.MyEnvVar}"/>
            <echo message="${MY_PROPERTY}"/>
    </target>
</project>

И файл свойств test.props:

MY_PROPERTY=${env.MyEnvVar}

Теперь установите переменную окружения MyEnvVar на некоторое значение (foo в моем случае) и запустите Ant с помощью этой командной строки:

ant -f test.xml -propertyfile test.props testProps

Выход, который я получаю:

[echo] foo
[echo] ${env.MyEnvVar}

Я хотел бы знать, есть ли способ структурировать файл входных свойств, чтобы получить

[echo] foo
[echo] foo

То есть, я хотел бы назвать переменную среды в файле свойств, которая заменяется в Ant script. Примечание. Я знаю, как напрямую обращаться к переменным среды (как это делается здесь). Что мне нужно сделать, так это использовать набор сценариев Ant, которые ожидают один набор свойств в среде, которая определяет те же свойства с использованием разных имен. Таким образом, мысль о "мостификации" их в файле свойств.

Я использую Ant версию 1.6.5.

Ответ 1

Вам нужно прочитать файл свойств test.props после среды - вы можете сделать это с помощью другой задачи property, т.е. добавить

<property file="test.props" />

после существующей задачи property environment.

В полном объеме:

<property environment="env" />
<property file="test.props" />

<target name="testProps">
    <echo message="${env.MyEnvVar}"/>
    <echo message="${MY_PROPERTY}"/>
</target>

Когда вы поставляете файл свойств в командной строке, он обрабатывается перед содержимым сборки, но в это время ${env.MyEnvVar} еще не установлен.