Ant脚本在运行过程中可以与操作人员进行交互。交互时使用到的主要几个标签如下:
message="All data is going to be deleted from DB continue (y/n)?"
validargs="y,n"
addproperty="do.delete" defaultvalue="n"
/>
<condition property="do.abort">
<equals arg1="n" arg2="${do.delete}"/>
</condition>
<fail if="do.abort">Build aborted by user.</fail>
input :是指输入,message - 显示给用户的提示;validargs - 只有在用户输入validargs指定的值时,输入才是有效的。addproperty - 用户在完成一次有效的输入后,会产生一个属性,该属性的名称为addproperty的值,属性的值则为用户的输入。如果用户不做输入操作(如直接回车),则属性的值将会是defaultvalue的值。
condition:是对条件进行判断,条件判断完成后,也会产生一个属性值。属性名称为property的值,而属性的值则由condition的内部标签返回值决定,默认为ture|false,但是不仅限于这两个值,如下情况:
<equals arg1="n" arg2="${input.value}"/>
</condition>
<!--
当用户的输入为n是,equals返回为ture,此是,do.delete的值会被设置为“yes”(该值由value属性指定),否则do.delete的值为被设置为no(由else属性的值指定)。也就是说,condition产生的属性的值并不仅限于true和false
-->
equals:等于判断。它有两个属性,arg1和arg2,不用说,就是判断这两个属性的值是否相等了。
此外,condition还支持其它类似的判断操作符如and、or、available、isset、istrue、isfalse、contains等等(详见http://ant.apache.org/manual/CoreTasks/conditions.html)。其中有几个需要重点讲一下(个人觉得功能还是比较有用的):
正则表达式的应用(具体如何使用正则表达式这里就不说了,强大但复杂,可以写一部新华字典出来)
1.matches:先看个例子
<matches pattern="[1-9]" string="${user-input}"/>
</condition>
<fail message="Your password should at least contain one number"
unless="legal-password"/>
其中呢,pattern就是正则表达式了,而string就是需要进行匹配的字符窜。而它还有几个有用的属性
casesensitive(true|false):是否区分大小写(默认为true);
singleline(true|false):单行模式,此时“.”将可以匹配换行符(默认为false);
multiline(true|false):多行模式(默认为false);
另外,在使用正则表达式时,ant还支持复用(可省很多事)。如下:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
<regexp id="date.pattern" pattern="^[0123]\d-[01]\d-[12]\d\d\d$"/>
<condition property="is_expected">
<matches string="${today}">
<regexp refid="date.pattern"/>
</matches>
</condition>
<!-- 如上,我们就可以重复地利用一段正式表达式了,就像声明了一个变量一样 -->
2.antversion
这个标签是指定ant的使用版本。为也避免使用过程中产生的不兼容性(如果把jdk1.6的代码在jdk1.4上运行时没有任何异常提示,也没有任何运行结果,你肯定很不爽),所以大家写脚本时,也尽量指定一个ant的版本需求。
antversion有两个属性:
atleast(major.minor.point):在某个版本以上(如1.7.0,通常应该是你当前脚本的运行版本)都可以正常使用;
exactly(major.minor.point):只能在这个指定的版本上运行(要求很苛刻呀,可能是这个版本上有特别的功能,而刚好其前后的版本都没有)。
下面是一个例子:
<antversion exactly="1.7.0"/>
</condition>
<fail unless="${ant-is-exact-7}" message="您使用的Ant版本不符合要求"/>