ant中的condition与available

参考: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脚本文件中随时使用这些时间属性  

猜你喜欢

转载自weigang-gao.iteye.com/blog/2168699
今日推荐