要將一個參數傳遞給ant來選擇環境,您可以使用例如ant -Denv=prod
或ant -Denv=test
來啓動ant,並根據env
屬性在ant build.xml中做出決定。
您可以設置基於像這樣的選擇環境中的其它特性:
<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是佔位符被$包圍的文件。在示例中,$ compiledwith $ in template.jnlp將被替換爲先前設置的scala編譯器參數,並將結果寫入appname.jnlp。