Ant之Target

    一个Target是一系列的Task的容器,这相当于

    一个Target可以依赖其他的TargetAnt会保证那些被依赖的Target会在当前的target之前被执行。例如我们有一个Target用来编译,另一个待分配的Target用来做其他的事情,这个待分配的Target就依赖于那个负责编译的TargetAnt会自动的解决这些依赖关系。

  我们需要注意的是,Ant在执行depends中的Target的时候是按照从左到右的依赖关系来执行的,一定要记住。比如我们现在有如下的Target:

 

<?xml version="1.0" encoding="UTF-8"?>
<project default="D" basedir="D:\AndroidWorkplace" name="第一个Project">
    <target name="main"><echo>mian Target编译</echo></target>
	<target name="A"><echo>Target:A is compiling...</echo></target>
	<target name="B" depends="A"><echo>Target:B is compiling...</echo></target>
	<target name="C" depends="B"><echo>Target:C is compiling...</echo></target>
	<target name="D" depends="C,B,A"><echo>Target:D is compiling...</echo></target>
</project>  
    假设我们执行 D 目标,看他的 depends 属性你也许会以为首先执行 C 然后是 B ,最后是 A 被执行,错! C 依赖于 B B 依赖于 A ,所以 A 是最先执行的然后是 B 最后是 C !所以正确的执行顺序是这样的:

A--->B--->C--->D

    如下便是执行的结果:


    在这种依赖链中,比如D及其之上所有的Target,每一个Target都只被执行了一次,尽管有多个Target依赖他(比如:A是最底层的,那么BCD都依赖于A的执行)。因此,当执行目标D时,首先会导致C被执行,然后就会导致B,然后导致A被执行,在ABC都执行完毕后,就返回到D的依赖列表,但是不会调用BA,因为他们已经在CD的依赖中被调用过了。

    此外,Target还可以检测是否设置了Property值,这个可能不太好理解,我们举个例子吧,假设我们现在有一个build文件如下:

   

<?xml version="1.0" encoding="UTF-8"?>
<project default="AModule" basedir="D:\AndroidWorkplace" name="第一个Project">
	<property name="module-A-present" value="Aaa"></property>
	<target name="AModule" if="module-A-present"><echo>Target:AModule is compiling...</echo></target>
</project>  
    此时控制台会打印Target:AModule is compiling...但是如果去掉上面的<property>设置,那么此AModule目标就不会执行。

而如果我们此时将if换成unless那么目标就不会执行,反之,如果去掉<propperty>就可以执行,没错,这就是if和unless的用法。

    需要注意的是每一个Target的if/unless只能指定一个条件检测,如果想要检查多个Property就可以这么来:

<?xml version="1.0" encoding="UTF-8"?>
<project default="myTarget" basedir="D:\AndroidWorkplace" name="第一个Project">
	<property name="myTarget.run" value="Aaa"></property>
	
	<target name="myTarget" depends="myTarget.check" if="myTarget.run">
    <echo>Files foo.txt and bar.txt are present.</echo>
</target>

<target name="myTarget.check">
    <!-- 使用多个condition -->
    <condition property="myTarget.run">
        <and>
             <available file="foo.txt"/>
            <available file="bar.txt"/>
        </and>
    </condition>
    <condition property="myTarget.runs">
        <and>
            <available file="foo.txt"/>
            <available file="bar.txt"/>
        </and>
    </condition>
</target>
</project>  
   执行以上build的时候会打印出myTarget的信息,但是如果将其if值改为myTarget.runs就不会打印信息,即他不会被执行,因为在myTarget.check中的名为myTarget.runs的condition并没有在Property中声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值