apache ant 中文手册

上传人:xzh****18 文档编号:34616523 上传时间:2018-02-26 格式:DOC 页数:11 大小:85.50KB
返回 下载 相关 举报
apache ant 中文手册_第1页
第1页 / 共11页
apache ant 中文手册_第2页
第2页 / 共11页
apache ant 中文手册_第3页
第3页 / 共11页
apache ant 中文手册_第4页
第4页 / 共11页
apache ant 中文手册_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《apache ant 中文手册》由会员分享,可在线阅读,更多相关《apache ant 中文手册(11页珍藏版)》请在金锄头文库上搜索。

1、Apache Ant 中文手册引言Apache Ant 是一个基于 Java 的编译工具。它从功能上类似于 make,但它以克服了 make 的缺点。为什么在 make, gnumake, nmake, jam 这些编译工具后,还要产生一个 Ant 呢?因为这些编译工具都有一定的限制。Ant 的最初开发者在开发跨平台的应用时,发现以前的那些开发工具都有一定的限制。例如 make 工具,它是基于 Shell 的,它判断一系列的条件,并像在 shell 下面那样执行编译命令,这样做的好处的:针对特定的平台(如 unix),可以容易的利用这些工具做编译;但同时,这也意味着,你的编译限制在固定的操作系

2、统下,如只能用于 unix。同时,Make 文件也有一些先天的缺陷。好多人都会遇到恐怖的 tab 问题。Ant的最初开发者多次说“我的命令不能执行因为我在 tab 前面加了一个空格!”。一些工具如 Jam 一定程序上解决了这个问题,但仍有其它的格式问题。Ant 与从基于命令的那些扩展开来的那些工具不同,Ant 是由 java 类扩展的。不用编写 shell 命令,而是配置基于 XML 的文件,形成多个任务的目标配置树。每一个任务都是通过一个实现了一个规定接口的 java 类来运行的。ant 缺少了一些直接执行 shell 命令的能力,如 find . -name foo -exec rm ,但

3、它给用户提供了跨平台的能力,可以在任何地方工作。实际上,Ant 也提供了命令 execute 用来执行 shell 命令,这就是它的任务,它允许执行基于操作系统的命令。安装 Ant 下载 Ant。Ant 有两个版本,二进制版本和原代码版本。 要编译和使用 Ant,你必须要有一个兼容 JAXP 的 XML 解析器。 二进制版本中自己带有了最新的 Apache Xerces2 XML 解析器。如果你想用不同的兼容 JAXP 的解析器,你可以移去 Ant 库目录下的 xercesImpl.jar 和xml-apis.jar 两个文件。你可以要用的解析器放到 Ant 的库目录下,也可以把jars 文件

4、放到系统的类路径中。 在 Ant 的当前版本中,还需要安装 JDK。下面的二进制片版本的安装后的目录结构。 ant 安装目录ant/bin 包含了运行脚本ant/lib ant 运行所需的类库ant/docs 文档ant/etc 一些配置,如何通过任务的 xml 输出建立详细的报告,移动编译后的文件,忽略错误警告在运行前还要做一些设置:1) 在 path 路径中加入 ant/bin 目录;2) 设置 ANT_HOME 为安装目录;3) 通常还要设置 JAVA_HOME 为 JAVA 的安装路径。 例如下: set ANT_HOME=c:antset JAVA_HOME=c:jdk1.5.1se

5、t PATH=%PATH%;%ANT_HOME%bin使用 Ant1 写一个简单的编译文件Ant 的编译文件是写成 XML 格式的,每一个编译文件包含一个 project 和至少一个target。 Targets 包含了一些 task 元素。每一个 task 元素可以有一个 id 属性(attribute)可以被其它的引用。2 Projects一个 projext 可以有如下的属性 attribute:attribute 说明 是否必须name 项目名称 Nodefault 当没有 target 支持时,缺省使用的 target Yes.basedir 基目录,其它的目录都是相对于此. 这个

6、attribute 可以被basedir property 覆盖。当basedir property 设置后,basedir attribute 就不起作用了。如果两者都没有设置,则 buildfile 本身的父目录作为基目录。 No根据需要,还可以设定项目的说明,在元素中。第一个 project 可以有一个或多个 targets。一个 target 就是一系列的你要执行的任务组。在运行 Ant 时, 你可以选择哪一个任务组被执行。如果没有给出执行的任务组,则 project 缺省的任务组被执行。3 Targetstarget 可能依赖于其它的 target 而存在。你可能用一个 target

7、 用来编译,用另一个 target 且用来布署。只有编译完成后,布署才可执行,这样布署就 依赖于编译。要说明的是,ant 的 depends attribute 只是规定了 target 之间的前后执行关系,并不表示真正的依赖性。依赖的次序是按照排列次序从左到右。但如果这些依赖本身之间还有依赖关系,也可能在后面的先执行,如下面的例子: 如果我们要运行 target D。从它的依赖 attribute 列表上看,可能先执行 C,然后 B,再后是 A。其实这是不对的。C 依赖于 B,B 依赖于 A。因此是A 先执行,然是 B,然后 C,最后是 D。一个 target 只执行一次,虽然可能好多的 t

8、arget 都依赖于它。如上例中所示。Target 还可以根据它的 attribute 的设置情况来判定执行情况。这允许根据系统的状况(如 java 版本,OS,命令行属性定义等等)更好的控制编译过程。这就引入 if 或 unless 属性(attribute)。 注意:Ant 只是检查属性(attribute)是否被设置,而不查它的值,即使属性(attribute)值为空字符串,它仍认为这是一个存在的属性(attribute)。例如:在第一行中,如果 module-A-present 属性(attribute)被设置,则target 执行。在第二个中,如果 module-A-present

9、属性(attribute)被设置,同target 不执行。如果没有 if 或 unless 属性(attribute),则目标总会被执行。可选的 description 属性(attribute)可以用来表示一行的 target的说明,可以在命令行中用-projecthelp 参数显示出来。没有 description 属性(attribute)的 target 被认为是内部的,并不显示出来,除非利用了-verbose 或-debug 参数。初始化 target,所有的其它 target 都依赖于它。通常都位于依赖列表的第一项。在这个手册中,大都的初始化 targets 用 init 来命名。

10、Target 有如下的属性:属性(attribute)说明 是否必须name Target 的名字 Yesdepends 依赖 target 列表 Noif 要执行 target,某属性(attribute)必须要被设置 Nounless 要执行 target,某属性(attribute)必须不能被设置 Nodescription 有关 target 功能的简短说明 NoTarget 命名说明:可以使用任何 XML 编码支持的字母表中的字符,如空串,逗号,空格。但最好避免使用它们,为了避免引起歧义,将来版本的 Ant 不支持这些特殊的字符。而各种 IDE 中时 target 的命名规则,则跟具

11、体的开发厂家相关。以横线开头的 target 名,如”-restart”是有效的命名,但不能被用来在命令行中执行。4 TasksTask 是一段可执行的代码。Task 可以有多种属性(attribute)(或参数,只要你喜欢),属性(attribute)的值可能包含了对属性(attribute)的引用。 这些引用在task 执行以前要解析开。Task 的通用结构如下:name 是 task 的名字,attributeN 是属性(attribute)的名字,而 valueN则是属性(attribute)的值。一些是内建的任务,而另一些是可选的任务,用户可自由定义。所有的 tasks 都有共享 t

12、ask 名字,属性(attribute)值将会在 ant 生成消息时用到。Task 可以指定一个 id 属性(attribute):Taskname 是 task 的名字,taskID 是一个独一无二的标识。你可以在脚本程序或其它的 task 中通过这个名字引用相应的 task 对象。例如:task1.setFoo(bar);这样可以 task1 的 Foo 属性值为 bar;而在 java 程序中,则通过project.getReference(task1)访问 task1 实例。5 Properties项目可以有一系列的属性(property)。这些可能在编译文件通过property 任务

13、(task)设置,或可能在 Ant 外设置。一个属性(property)由名字和值对应起来。名字是大小写敏感的。属性(property)可以用在 task 的(attribute)中。能够在”property 名”的方式进行引用。例如,如果有一个 builddir 属性(property),值为 build,则在属性(attribute)中可以这样用:$builddir/classes。在运行时,它被转换成 build/classes。内建的 PropertiesAnt 提供了所有的系统属性的访问就像这些系统属性(property)已经定义在任务中一样。例如:$os.name表示操作系统的名称

14、。下面列出了一些内建属性(property):basedir 项目的绝对路径 (就像在的 basedir 属性中定义中的一样)ant.file 编译文件的绝对路径ant.version Ant 的版本ant.project.name 正在执行的项目的名字,(就像在的 name 属性中设置的那样).ant.java.version JVM 的版本,其值可能是1.1, 1.2, 1.3 and 1.4.编译文件的例子:simple example build file 上面,我们把属性(property)定义在任何 target 的外部,和这些 task 是特殊的 task,可以在任何的 target 外部定义。这样做时,它们会在任何 target 执行前被执行。其它任何的 task 不能target 目录外定义。上面一些 target 给了 description,这样,在使用 projecthelp 选项时,会列出 这些公共的 targets,而那些没有 description 的 target 则被认为是内部的,并不显示。最后,要使 target 工作,则 source 子目录要存在相应的位置。注: 英文中有两个单词都是属性 attribute, property,这里不好区分。因此,实际翻译时,把原文的这两个单词也写了出来。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 理论文章

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号