Есть несколько способов сделать это. Наиболее простым является использование двух condition
операторов и использование неизменности свойств:
<condition property="property2" value="string1">
<isset property="property1"/>
</condition>
<condition property="property3" value="string2">
<isset property="property1"/>
</condition>
<!-- Properties in ant are immutable, so the following assignments will only
take place if property1 is *not* set. -->
<property name="property2" value="string2"/>
<property name="property3" value="string1"/>
Это немного громоздко и плохо масштабируется, но только для двух свойств я бы, вероятно, использовал этот подход.
Несколько лучше использовать условную цель:
<target name="setProps" if="property1">
<property name="property2" value="string1"/>
<property name="property3" value="string2"/>
</target>
<target name="init" depends="setProps">
<!-- Properties in ant are immutable, so the following assignments will only
take place if property1 is *not* set. -->
<property name="property2" value="string2"/>
<property name="property3" value="string1"/>
<!-- Other init code -->
</target>
Мы снова пользуемся преимуществом неизменности собственности здесь. Если вы не хотите этого делать, вы можете использовать атрибут unless
и дополнительный уровень косвенности:
<target name="-set-props-if-set" if="property1">
<property name="property2" value="string1"/>
<property name="property3" value="string2"/>
</target>
<target name="-set-props-if-not-set" unless="property1">
<property name="property2" value="string2"/>
<property name="property3" value="string1"/>
</target>
<target name="setProps" depends="-set-props-if-set, -set-props-if-not-set"/>
<target name="init" depends="setProps">
<!-- Other init code -->
</target>
Важно отметить, что атрибуты if
и unless
target
проверяют только, установлено ли свойство, а не значение свойства.