私は、常に指定されているが常に定義されているわけではないオプションのパラメーターを使用してantビルドを実行する状況にあります。
ant -DBUILD_ENVIRONMENT=test -Dusername_ext= -Dconf.dir_ext= -Dcgi-dir_ext=
パラメータにコマンドラインで値が指定されていない場合は、.propertiesファイルをロードすることで設定されます。プロパティが設定されていて空白でないかどうかを確認する次のコードがあります。
<if>
<bool>
<and>
<isset property="username_ext"/>
<not>
<equals arg1="${username_ext}" arg2="" />
</not>
</and>
</bool>
<then>
<property name="username" value="${username_ext}" />
</then>
</if>
<property file="${BUILD_ENVIRONMENT}.properties" />
複数のプロパティがあるため、毎回そのコードを繰り返すのではなく、各プロパティに対して同じアクションを実行するターゲットを作成する必要があるようです。
<antcall target="checkexists">
<property name="propname" value="username"/>
<property name="paramname" value="username_ext"/>
</antcall>
<antcall target="checkexists">
<property name="propname" value="conf.dir"/>
<property name="paramname" value="conf.dir_ext"/>
</antcall>
ただし、AFAIKのantcallはグローバルプロパティを設定しません。次に、チェックする必要のあるパラメーターの名前が設定されていて空白ではないことを受け入れるターゲットを作成し、それを他のターゲットが使用できるパラメーターにコピーするにはどうすればよいですか?