Ant之Target

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

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

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

 



    mian Target编译
	Target:A is compiling...
	Target:B is compiling...
	Target:C is compiling...
	Target:D is compiling...
  
    假设我们执行 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文件如下:

   



	
	Target:AModule is compiling...
  
    此时控制台会打印Target:AModule is compiling...但是如果去掉上面的设置,那么此AModule目标就不会执行。

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

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



	
	
	
    Files foo.txt and bar.txt are present.



    
    
        
             
            
        
    
    
        
            
            
        
    

  
   执行以上build的时候会打印出myTarget的信息,但是如果将其if值改为myTarget.runs就不会打印信息,即他不会被执行,因为在myTarget.check中的名为myTarget.runs的condition并没有在Property中声明。

你可能感兴趣的:(Ant,android,adb,tools,ant)