antに引数を渡して環境を選択するには、たとえばantで開始するant -Denv=prod
かant -Denv=test
、プロパティに基づいてantbuild.xmlで決定を下しenv
ます。
次のように、選択した環境に基づいて他のプロパティを設定できます。
<target name="compile" depends="init" description="compile the source">
<!-- settings for production environment -->
<condition property="scalacparams"
value="-optimise -Yinline -Ydead-code -Ywarn-dead-code -g:none -Xdisable-assertions">
<equals arg1="${env}" arg2="prod"/>
</condition>
<condition property="javacparams" value="-g:none -Xlint">
<equals arg1="${env}" arg2="prod"/>
</condition>
<!-- settings for test environment -->
<condition property="scalacparams" value="-g:vars">
<equals arg1="${env}" arg2="test"/>
</condition>
<condition property="javacparams" value="-g -Xlint">
<equals arg1="${env}" arg2="test"/>
</condition>
<!-- abort if no environment chosen -->
<fail message="Use -Denv=prod or -Denv=test">
<condition>
<not>
<isset property="scalacparams"/>
</not>
</condition>
</fail>
<!-- actual compilation done here ->
</target>
<if>
また、特定の環境に対してのみ特定のアクションを実行するために使用することもできます。
<if> <!-- proguard only for production release -->
<equals arg1="${env}" arg2="prod" />
<then>
<!-- run proguard here -->
</then>
</if>
最後に、環境に応じてファイルに文字列を挿入するには、最初に(上記のように)どの環境が選択されているかを確認してからプロパティを設定し、次に次のようにします。
<copy file="template.jnlp" tofile="appname.jnlp">
<filterset begintoken="$" endtoken="$">
<filter token="compiledwith" value="${scalacparams}"/>
<!--- more filter rules here -->
</filterset>
</copy>
これは、template.jnlpが$で囲まれたプレースホルダーを持つファイルであると想定しています。この例では、template.jnlpの$ compiledwith $は、以前に設定されたscalaコンパイラー・パラメーターに置き換えられ、結果はappname.jnlpに書き込まれます。