例如,要将参数传递给 ant 以选择环境,您可以启动 ant,ant -Denv=prod
或者ant -Denv=test
根据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 是一个由 $ 包围的占位符的文件。在示例中,template.jnlp 中的 $compiledwith$ 将被替换为之前设置的 scala 编译器参数,并将结果写入 appname.jnlp。