これを行うにはいくつかの方法があります。最も簡単なのは、2つの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"/>
これは少し面倒で、適切に拡張できませんが、2つのプロパティについては、おそらくこのアプローチを使用します。
やや良い方法は、条件付きターゲットを使用することです。
<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
のandunless
属性はtarget
、プロパティの値ではなく、プロパティが設定されているかどうかのみをチェックすることに注意してください。