Как установить свойство Ant только в том случае, если оно не установлено

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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.

Ответ 3

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

<if>
    <not>
        <isset property="your.property"/>
    </not>
    <then>
        <property name="your.property" value="your.value"/>
    </then>
</if>

Ответ 4

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

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

    <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 -->

Ответ 5

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

else

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>