[Ant][StartWithAnt] 第二章 Ant基础知识准备

点击此处下载StartWithAnt完整的pdf文档与代码:http://download.csdn.net/detail/sodino/6603769


通过 第一章操作,Ant的大门已经为你打开。现在解释介绍一下Ant中重要的三个元素。

1.project

project元素有三个属性。

name表示当前工程名称;

当Ant被调用时,如果没有指定执行具体的目标(target),则default将指定要执行的目标;

basedir用于指定Ant的基础目录,Ant中所有的相对路径都将以此值为基础进行计算。

这三个元素都不是必备的,但为了方便工程的执行,通常都会对default进行赋值。在代码1.1 中,直接就支接运行了Echo目标打印“Hello world!”。

2.target

target是一系列task任务的有序集合。

1. target的分类:

属性description为当前目标(target)处理的业务逻辑进行描述。有被赋值的目标(target)称为Main Target。未被声明的则为Subtarget。通过命令行:ant –f buildfile.xml –projecthelp可以将target区分开来。

<target name="Echo" description="Just print 'Hello world'.">
<echo message="Hello world! I'm ant."></echo>
</target>
<target name="EchoSubTarget"/>

代码2.1 Target分类


2.1 Target分类

由上图可看出,Main Target清单中有”Echo”,并做出了描述;但未对description赋值的target:EchoSubTarget并没有被打印出来。



2. target具有依赖特性

先给出一段代码,如下:

<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>

代码2.2 target的依赖特性

2.1 target的依赖关系

属性”depends”可以决定target之间依赖关系;并且不限定依赖个数,即一个子target可以同时依赖多个父target。

2.2 target多重依赖的调用顺序

假若要执行D,由于C依赖自BB依赖自A,所以这些target的调用顺序会是:AàBàCàD。

2.3 target多次依赖的调用次数

D依赖了ABC,但由于CABBA的依赖关系,在执行D时前的初始化操作中,ABC都仅会且仅会被执行一次。并不会因为D中刻意声明依赖自BA会再单独执行BA,因为C的初始化操作中已经执行过一次了。

2.4 依赖的传承

A声明的数据元素,包括特性(property)Data Type或时间戳(tstamp)仍可以在B、CD中使用。

在下面的代码中,默认目标target为D。当Ant执行此文件,由于D的依赖关系,会依次调用A、BC,并且A、BC都只会被调用一次。而D作为最底层的依赖目标target,可以直接使用上层被依赖target内的所有数据元素。

<target name="A" description="First Class A">
	<property name="a.value" value="Apple" />
	<echo message="I'm a ${a.value}."></echo>
</target>
<target name="B" description="First Class B" depends="A">
	<property name="b.value" value="Bee" />
	<echo message="I'm a ${b.value}."></echo>
</target>
<target name="C" description="First Class C" depends="B">
	<property name="c.value" value="Car" />
	<echo message="I'm a ${c.value}."></echo>
   </target>
   
<target name="D" description="First Class D" depends="C,B,A">
	<echo message="a.value=${a.value}"/>
	<echo message="b.value=${b.value}"/>
	<echo message="c.value=${c.value}"/>
</target>

代码2.3 依赖关系示例


图2.3 依赖关系示例

以上示例代码见build_02.2_depends.xml


3.project与target的小关系

每个Ant文件由单个的project元素组成,该元素可以包含一个或多个target元素。一个目标(target)是生成过程中已定义的一个步骤,可以定义任意数量的操作,比如编译源代码,对Apk进行签名等。这些操作本身由其他专用任务(Task)标签执行。通常为了编写的灵活性,把数量较多的操作根据其业务逻辑划分到单独的目标(target)元素中,这样可以有选择性的执行整体生成过程中的单独部分。例如,可以调用某些目标元素,直接对安装包进行重新签名,而不需要从头执行编译操作。

4.task

task是指一系列内嵌在target的任务元素。用它来处理具体的业务操作。在上面的例子中,已经使用到打印输出的任务task:“echo”。

5.数据元素

Ant中数据元素可以分为两类:特性和Data Type

特性(property)表示字符串数据的名-值对。除了字符串以外,任何其他数据类型均不能与特性相关联。下面的第三章将会专门用来讲解特性的使用。

Data Type的出现解决了批量的路径和文件列表定义用多个特性值表示相当繁琐的问题。Ant中支持的Data Type:argumentenvironmentfilelistfilesetfiltersetpathmapper

6.Ant自检顺序

Ant构建文件定义了一个project及一个或多个target,而target内又可以包含一个或多个task。用Xml表示了一个层次树结构。Ant在处理时也遵循此树的路径。在工程级元素(project level,<project>元素内的XML)Ant会对XML元素做宽度优先遍历,在目标级元素(<target>元素内的XML)Ant要完成深度优先遍历。即,会先加载并处理在<project>元素下一级上的所有元素,然后再移至第一个目标target,从目标target的第一个元素开始,在移至下一个元素之前会尽可能向下(尽可能深)地处理各个元素。

以上的话简单的说,为Ant在进行自身的错误检测或预编译处理时,会先处理全部的工程级元素,然后按运行到的目标target顺序逐一按深度优先的方式进行处理。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值