参考:http://www.blogjava.net/fingki/archive/2008/05/21/201919.html
1.<condition>任务在测试成功后才对特征进行设置,否则保留特征不设置。
大部分Ant测试可以根据<condition>任务进行分组,如过嵌套的条件测试为true,它将对一个已经命名的特征进行设置。使用逻辑运算符<and>,<or>, <xor>和<not>可以构成一个复杂的测试条件。例如
<?xml version="1.0"?> <project name="testCondition" > <target name="test"> <!--判断本机操作系统是不是windows,unix中之一,如果是,特征值设置为success--> <condition property="os" value="success" else="fail"><!--已经命名特征os--> <or><!--嵌套条件--> <os family="unix" /> <os family="windows" /> </or> </condition> <echo>sconditon=${os}</echo> </target> </project>
a)条件是否为true,决定了特征是否存在。Ant规定条件为true,特征会赋值为true。条件不成立,特征不存在。
<project name="testCondition"> <target name="test"> <!--如果条件为true,则设置特征值为true。否则特征不存在(而不是说不给scondtion赋值)--> <condition property="scondition"> <istrue value="true"/><!--条件--> </condition> <antcall target="isTrue"></antcall> </target> <target name="isTrue" if="scondition"><!--只要名为scondition的特征存在,那就执行isTrue--> <echo>is ture</echo> </target> </project>
b)由于特征scondtion根本不存在,所以不会执行目标test。而不是根据特征的值来决定目标是不是被执行。
<?xml version="1.0"?> <project name="testCondition"> <target name="test" if="scondition"> <echo message="scondition1=${scondition}" /> <echo>is ture</echo> </target> </project>
但是如果我们在命令行中设置了特征scondition(ant -Dscondition=false test),那么目标test就会被ant执行
2.测试127.0.0.1这台机器上的8080端口是否被应用程序占用。如果没被占用,输出错误提示信息。
<?xml version="1.0"?> <project name="testCondition" > <target name="test"> <property name="server.port" value="8080" /> <fail message="no server at ${server.port}" > <condition> <not> <socket port="${server.port}" server="127.0.0.1" /> </not> </condition> </fail> </target> </project>
3.按照ant手册,任务 <tstamp/>的作用就是Sets the DSTAMP, TSTAMP, and TODAY properties in the current project, based on the current date and time.然后,在build file的其他地方使用DSTAMP,TSTAMP,TODAY三个属性.当然,如果在build file的其他地方不使用DSTAMP,TSTAMP,TODAY这三个属性.那么<tstamp/>其实就相当于没有用了 。样例:
<project name="portal" basedir="."> <property name="lib.dir" value="lib" /> <tstamp/> <target name="init"> <echo message="${TODAY}" /> <echo message="${DSTAMP}" /> <echo message="${TSTAMP}" /> </target> </project>
将以上代码保存为:build.xml文件后执行,可以得到一下结果
也就是说:在你的Ant脚本中定义了<tstamp/>对象后,它便为我们定义了三个属性变量:DSTAMP,TSTAMP,TODAY
<tstamp/>任务允许任何数量的嵌套<format>元素,它们以给定的格式规范来定义特征。例如:你也可以像这样:
<?xml version="1.0" ?> <project name="portal" > <target name="init"> <tstamp> <format property="TODAY" pattern="yyyy-MM-dd" locale="cn" /> <format property="NOW" pattern="yyyy-MM-dd HH:mm:ss" locale="cn" /> </tstamp> <echo message="now=${NOW}, TODAY=${TODAY}"/> </target> </project>自己设定日期和时间的格式,以便你在Ant脚本文件中随时使用这些时间属性