Как установить свойство Ant, только если оно не установлено - PullRequest
67 голосов
/ 06 мая 2009

Я не могу понять, как установить свойство Ant при условии, что оно не было установлено (т. Е. Оно не определено в файле свойств и должно автоматически устанавливаться по умолчанию).

Пока у меня есть только следующий код:

<condition property="core.bin" value="../bin">
    <isset property="core.bin"/>
</condition>

Но, похоже, это работает, только если значение определено в теге <property>.

Кто-нибудь знает, как условно установить свойство в первый раз, если оно в данный момент не установлено?

Ответы [ 5 ]

112 голосов
/ 06 мая 2009

Вы можете просто установить свойство с помощью свойства-задачи. Если свойство уже установлено, значение не изменяется, поскольку свойства являются неизменяемыми.

Но вы также можете включить «не» в ваше состояние:

<condition property="core.bin" value="../bin">
   <not>  
      <isset property="core.bin"/>
   </not>
</condition>
62 голосов
/ 14 мая 2009

Ant делает это по умолчанию; если свойство уже установлено; установка его снова не имеет никакого эффекта:

<project name="demo" default="demo">
    <target name="demo" >
        <property name="aProperty" value="foo" />
        <property name="aProperty" value="bar" /> <!-- already defined; no effect -->
        <echo message="Property value is '${aProperty}'" /> <!-- Displays 'foo' -->
    </target>
</project>

Придает

   /c/scratch> ant -f build.xml
Buildfile: build.xml

demo:
     [echo] Property value is '${aProperty}'

BUILD SUCCESSFUL
Total time: 0 seconds
/c/scratch> ant -f build.xml
Buildfile: build.xml

demo:
     [echo] Property value is 'foo'

BUILD SUCCESSFUL

Свойства не могут быть переопределены; для этого вам нужно использовать что-то вроде переменной от ant-contrib .

6 голосов
/ 22 апреля 2014

Самый простой способ сделать то, что вы хотите:

<if>
    <not>
        <isset property="your.property"/>
    </not>
    <then>
        <property name="your.property" value="your.value"/>
    </then>
</if>
3 голосов
/ 18 июня 2014

Существует поддержка использования 'else' в пределах: https://ant.apache.org/manual/Tasks/condition.html для достижения ваших точных целей.

иначе

The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Apache Ant 1.6.3

Итак, измените на:

<condition property="core.bin" else="../bin">
    <isset property="core.bin"/>
</condition>
2 голосов
/ 08 февраля 2014

Свойства в Ant неизменны. После определения они не могут быть изменены.

Но пакет Ant Contrib предлагает задачу variable. Это работает как свойство, но значения могут быть изменены и не установлены. Пример из документации по переменной задачи :

    <var name="x" value="6"/>
    <if>
        <equals arg1="${x}" arg2="6" />
        <then>
            <var name="x" value="12"/>
        </then>
    </if>
    <echo>${x}</echo>   <!-- will print 12 -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...