Antの2つのブール値に依存する2つの異なる変数に2つの異なる文字列を割り当てようとしています。
擬似コード(ish):
if(condition)
if(property1 == null)
property2 = string1;
property3 = string2;
else
property2 = string2;
property3 = string1;
私が試したのは;
<if>
<and>
<not><isset property="property1"/></not>
<istrue value="${condition}" />
</and>
<then>
<property name="property2" value="string1" />
<property name="property3" value="string2" />
</then>
<else>
<property name="property2" value="string2" />
<property name="property3" value="string1" />
</else>
</if>
しかし、「<if>
」を含む行に対してnullポインタ例外が発生します。 <condition property=...>
タグを使用して動作させることができますが、一度に設定できるプロパティは1つだけです。 <propertyset>
を使ってみましたが、それも許可されませんでした。
あなたがおそらく推測しているように、私はアリに不慣れです:)。
Gav
これを行うにはいくつかの方法があります。最も簡単なのは、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
のunless
属性とtarget
属性は、プロパティの値ではなく、プロパティが設定されているかどうかのみを確認することに注意してください。
Ant-Contrib ライブラリを使用して、きちんとした<if><then><else>
構文にアクセスできますが、いくつかのダウンロード/インストール手順。
この他のSO質問: ant-contrib --if/then/else task を参照してください