没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
23页
Apache Ant 是一个基于 Java 的生成工具。据最初的创始人 James Duncan Davidson 介绍,这个工具的名称是 another neat tool(另一个整洁的工具) 的首字母缩写。 生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本,这就变得更加重要了。C 或 C++ 中的传统项目经常使用 make 工具来做这件事情,其中生成任务是通过调用 shell 命令来执行的,而依赖关系定义在每个生成文件之间,以便它们总是以必需的顺序执行。 Ant 与 make 类似,它也定义生成文件之间的依赖关系;然而,与使用特定于平台的 shell 命令来实现生成过程所不同的是,它使用跨平台的 Java 类。使用 Ant,您能够编写单个生成文件,这个生成文件在任何 Java 平台上都一致地操作(因为 Ant 本身也是使用 Java 语言来实现的);这就是 Ant 最大的优势。 Ant 的其他关键优势包括其突出的简单性和无缝地使用自定义功能来扩展它的能力。但愿您在完成本教程其余内容的学习之后,会欣赏 Ant 的这些优势。
资源推荐
资源详情
资源评论
本教程所讲述的内容
在本教程中,您将学习 Ant 这个 Java
TM
项目生成工具。由于其灵活性和易用性,Ant 很快在
Java 开发人员中流行开来,因此您有必要了解关于它的更多信息。
在继续学习本教程之前,你不需要具备先前的 Ant 经验或知识。我们将首先查看 Ant 生成文
件(build le)的基本结构,并学习如何调用这个工具。我们将逐步完成为一个简单 Java 项
目编写生成文件的步骤,然后考察 Ant 的其他一些有用功能,包括文件系统操作和模式匹配。
最后编写一个扩展 Ant 功能的自己的 Java 类来结束本教程。
在学习本教程的过程中,我们将同时展示如何从命令行以及从其他开放源代码 Eclipse IDE 运
行 Ant。试验本教程中的例子不需要同时具备这两种环境;您可以选择其一,甚至选择某种不
同的开发环境,只要该环境支持 Ant。如果选择从命令行使用 Ant,并且 Ant 还没有安装到机
器上,您需要遵循 Ant 主页上的安装说明(请参阅参考资料以获得相关链接)。相反,如果决
定仅使用 Eclipse 环境,您不需要单独安装 Ant,因为 Eclipse 已经包括了它。如果还没有
Eclipse,您可以从 Eclipse.org(请参阅参考资料)下载 Eclipse。
谁应该学习本教程?
如果您正在编写 Java 代码却还没有使用 Ant,那么本教程就是为您准备的。不管您当前是否
在使用某种不同的生成工具,或者根本就没有使用生成工具,了解关于 Ant 的更多知识或许会
促使您转而使用它。
如果已经在使用 Ant,那么您仍然可能在本教程中发现一些有趣的东西。或许您会发现一些预
料之外或无法完全理解的 Ant 行为;本教程将会帮助您。或者,也许您熟悉 Ant 的基础,但
是还想知道诸如将生成文件链接起来、使用 CVS 知识库或编写自定义任务等高级主题;本教
程将会介绍所有这些主题。
Ant 主要是设计用于生成 Java 项目的,但这并不是它唯一的用途。许多人发现它对其他任务
也很有帮助。比如以跨平台的方式执行文件系统操作。此外,还有许多可用的第三方 Ant 任务,
而编写自定义的 Ant 任务也是相对简单的,因此很容易针对特定的应用程序定制 Ant。
关于作者
Matt Chapman 1996 是英国 Hursley 的 IBM Centre for Java Technology 的咨询软件工
程师。他过去七年来一直致力于 Java 技术,包括 Java 虚拟机实现和各类平台、用户界面工具
包 Swing 和 AWT,以及近来为 Eclipse 平台所编写的工具。Matt 拥有计算机科学方面的学
位,并且还是一名 Sun 认证的 Java 程序员。可通过 mchapman@uk.ibm.com
与他联系。
简介
本节将概述 Ant 的功能和优势,并讨论它的历史概况和日渐提高的普及性。然后我们通过考察
一个最基础的生成文件的基本结构,直接进入对 Ant 基础的讨论。我们还会介绍
属性
和
依赖
关系
的概念。
Ant 是什么?
Apache Ant 是一个基于 Java 的生成工具。据最初的创始人 James Duncan Davidson 介
绍,这个工具的名称是 another neat tool
(另一个整洁的工具)
的首字母缩写。
生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换
为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都
使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本,这就
变得更加重要了。C 或 C++ 中的传统项目经常使用 make 工具来做这件事情,其中生成任务
是通过调用 shell 命令来执行的,而依赖关系定义在每个生成文件之间,以便它们总是以必需
的顺序执行。
Ant 与 make 类似,它也定义生成文件之间的依赖关系;然而,与使用特定于平台的 shell 命
令来实现生成过程所不同的是,它使用跨平台的 Java 类。使用 Ant,您能够编写单个生成文
件,这个生成文件在任何 Java 平台上都一致地操作(因为 Ant 本身也是使用 Java 语言来实
现的);这就是 Ant 最大的优势。
Ant 的其他关键优势包括其突出的简单性和无缝地使用自定义功能来扩展它的能力。但愿您在
完成本教程其余内容的学习之后,会欣赏 Ant 的这些优势。
Ant 简史
Ant 最初是 Tomcat 的一个内部组件,Tomcat 是 Java Servlet 和 JavaServer Pages
(JSP) 参考实现中使用的 servlet 容器。Tomcat 代码基被捐赠给了 Apache 软件基金会;在
那里它又成了 Apache Jakarta 项目的组成部分,该项目致力于为 Java 平台产生开放源代码
的服务器端解决方案。Ant 的有用性很快得到了认可,对它的使用遍布在其他 Jakarta 子项目
中。因而,它自己也成了一个 Jakarta 子项目,其第一个独立版本于 2000 年 7 月发布。
从那以后,Ant 的普及性已经不断地提高。它赢得了无数的行业大奖,并成为用于生成开放源
代码 Java 项目的
事实上
的标准。2002 年 11 月,这些成功得到了确认,Ant 被提升为顶级
Apache 项目。
在本文编写之际,Ant 的当前稳定版本是 1.5.4,它支持 1.1 以后的所有 JDK 版本。下一个版
本(即 1.6 版)的 beta 版也已经可用,这些版本需要 JDK 1.2 或更高版本。未来的 2.0 版也
正在计划之中,它将涉及一次重大的体系结构重新设计。Ant 2.0 将以改进的一致性和增强的
功能为特色,同时仍然保持 Ant 的简单性、易于理解性和可扩展性等核心目标。
Ant 生成文件剖析
Ant 没有定义它自己的自定义语法;相反,它的生成文件是用 XML 编写的(请参阅参考资
料)。存在一组 Ant 能够理解的预定义 XML 元素,而且就像您将在下一节中看到的一样,还
可以定义新的元素来扩展 Ant 的功能。每个生成文件由单个 project 元素组成,该元素又包
含一个或多个 target 元素。一个目标(target)是生成过程中已定义的一个步骤,它执行任
意数量的操作,比如编译一组源文件。这些操作本身是由其他专用任务标签执行的,我们将在
后面看到这一点。然后这些任务将根据需要被分组到各个 target 元素中。一次生成过程所必
需的所有操作可以放入单个 target 元素中,但是那样会降低灵活性。将那些操作划分为逻辑
生成步骤,每个步骤包含在它自己的 target 元素中,这样通常更为可取。这样可以执行整体
生成过程的单独部分,却不一定要执行其他部分。例如,通过仅调用某些目标,您可以编译项
目的源代码,却不必创建可安装的项目映像。
顶级 project 元素需要包含一个 default 属性,如果在 Ant 被调用时没有指定目标,这个
属性将指定要执行的目标。然后需要使用 target 元素来定义该目标本身。下面是一个最基本
的生成文件:
<?xml version="1.0"?>
<project default="init">
<target name="init">
</target>
</project>
注意这是一个结构良好的 XML 文档,其中一个 XML 声明指定了所使用的 XML 的版本(这不
是当前的 Ant 所必需的,但是这样做是一个好习惯),而且每个元素都正确地关闭了。 一次
性打开和关闭一个元素也是可以做到的。因此,与其像上面那样对 target 元素使用单独的起
始和结束标签,我们可以将它写为如下形式:
<target name="init"/>
当元素没有包含任何内容时,更简练的形式会更清晰。
添加描述:
我们在前一小节中看到的生成文件是优雅简练的,但它并没有包含多少关于正在生成的实际项
目的信息。可以通过许多方式来使它更具描述性,同时无需改变其功能。下面是一个例子:
<?xml version="1.0"?>
<project default="init" name="Project Argon">
<description>
A simple project introducing the use of descriptive tags in Ant build files.
</description>
<!-- XML comments can also be used -->
<target name="init" description="Initialize Argon database">
<!-- perform initialization steps here -->
</target>
</project>
可以看出,XML 注释可以使用在整个生成文件中以提高清晰性。而且,Ant 定义了它自己的
description 元素和 description 属性,它们可用于提供更结构化的注释。
属性
Ant 中的
属性
类似编程语言中的变量,它们都具有名称和值。然而与通常的变量不同,一经
设置,Ant 中的属性就不可更改;它们是不可变的,就像 Java 语言中的 String 对象。 这起
初看来似乎很有限制性,但这样是为了遵循 Ant 的简单原则: 毕竟,它是一个生成工具,而
不是一种编程语言。如果尝试给某个现有属性赋予一个新的值,这不会被看作是一个错误,但
是该属性仍然会保留其现有值。(我们将会看到,这种行为是有用的。)
基于元素的描述性名称和到目前为止所见到的属性,在 Ant 中用于设置属性的机制看起来如下
就没有什么奇怪了:
<property name="metal" value="beryllium"/>
为了在生成文件的其他部分引用这个属性,您会使用以下语法:
${metal}
例如,为了使用这样一个值,它是另一个属性的值的组成部分,您会将标签写为下面这样:
<property name="metal-database" value="${metal}.db"/>
Ant 中有许多预定义的属性。首先,Java 环境设置用于运行 Ant 的所有系统属性,均可作为
Ant 属性使用,比如 ${user.home} 。除了这些属性之外,Ant 还定义了它自己的一小组属
性,包括 ${ant.version},这个属性包含 Ant 的版本;以及 ${basedir},这个属性是项
目目录的绝对路径(由包含生成文件的目录所定义,或者由 project 元素的可选 basedir
属性所定义)。
属性经常用于引用文件系统上的文件或目录,但是对于使用不同路径分隔符(例如,/ 与 \)
的平台来说,这样可能在跨越不同平台时导致问题。Ant 的 location 属性专门设计用于以平
台无关的方式包含文件系统路径。您会像下面这样使用 location 来代替 value:
<property name="database-file" location="archive/databases/${metal}.db"/>
用于 location 属性的路径分隔字符将被转换为当前平台的正确格式;而且由于文件名是相对
的,它被认为是相对于项目的基目录。我们同样可以容易地写为下面这样:
<property name="database-file" location="archive\databases\${metal}.db"/>
这个标签的两个版本都会在不同的平台具有相同的行为。如果可移植性是必需的,唯一要避免
的内容就是文件名中的 DOS 风格的驱动器号。在可能的地方使用相对路径名称而不是绝对路
径名称,这样还会更加灵活。
定义依赖关系
生成一个项目一般需要许多步骤 —— 例如首先要编译源代码,然后将它打包为 Java 归档文件
(Java Archive File,JAR)。(请参见 参考资料 以了解关于使用 JAR 的更多信息。)这其
中许多步骤都具有清楚定义的顺序 —— 例如,在编译器从源代码生成类文件之前,您不能打
包类文件。与顺序指定 target 所不同的是,Ant 采用一种更灵活的方法来定义
依赖关系
,就
像 make 和类似的生成工具所做的那样。每个目标的定义依据的是在它在能够执行之前必须完
成的其他所有目标。这是使用 target 元素的 depends 属性来实现的。例如:
<target name="init"/>
<target name="preprocess" depends="init"/>
<target name="compile" depends="init,preprocess"/>
<target name="package" depends="compile"/>
这种方法允许您执行项目任何阶段的生成过程;Ant 会首先执行已定义的先决阶段。在上面的
例子中,如果让 Ant 完成 compile 步骤,它将判断出需要首先执行 init 和 preprocess
这两个目标。init 目标不依赖其他任何目标,因此它将首先被执行。然后 Ant 检查
preprocess target,发现它依赖 init 目标;由于已经执行了后者,Ant 不会再次执行它,
因而开始执行 preprocess 目标。最后可以执行 compile 任务本身。注意目标出现在生成文
件中的顺序并不重要:执行顺序是由 depends 属性唯一确定的。
运行 Ant
简介
Apache Ant 可通过各种不同的方式来调用。就其本身而言,Ant 是一个命令行形式的工具,
通常从 UNIX 或 Linux shell 提示符或者 Windows 命令提示符调用,生成文件则使用您自己
选择的文本编辑器来编写。如果要生成的项目是以这种方式开发的,那么这样调用 Ant 很好,
但是许多人发现 IDE 更方便。大多数 IDE 都对 Ant 提供了某种程度的支持,因此在使用 IDE
的情况下,最起码,您不必麻烦地离开 IDE 来执行命令行操作就能调用 Ant 生成任务。
在本节中,我们将考察如何从命令行使用 Ant,并了解一些有用的命令行选项。 然后简要了解
一下开放源代码的 Eclipse 平台提供的 Ant 支持。(为了最充分地利用下面这些小节讲述的内
容,您至少应该被动地熟悉 Eclipse。)
从命令行运行 Ant
从命令提示符调用 Ant 可以简单得只需键入单独的 ant。如果您这样做,Ant 将使用默认的生
成文件;该生成文件中指定的默认目标就是 Ant 尝试要生成的目标。还可以指定许多命令行选
项,后面跟着任意数量的生成目标,Ant 将按顺序生成这其中的每个目标,并在此过程中解决
所有依赖关系。
下面是从命令行执行的 Ant 生成任务的一些典型输出:
Buildfile: build.xml
init:
[mkdir] Created dir: E:\tutorials\ant\example\build
[mkdir] Created dir: E:\tutorials\ant\example\dist
compile:
[javac] Compiling 8 source files to E:\tutorials\ant\example\build
dist:
[jar] Building jar: E:\tutorials\ant\example\dist\example.jar
BUILD SUCCESSFUL
Total time: 2 seconds
随着我们继续本教程的学习,我们将弄明白所有这些输出意味着什么。
命令行选项
剩余22页未读,继续阅读
资源评论
- moonbeach2012-01-13自动化脚本ant,这个资料不错!
- kelivn2012-07-13初学者够用,不过还不够详细
- feiyizero2013-11-18感觉还行,初学者看看可以
- 普通网友2011-10-12正在学习ant 不过感觉资料不是很详细
zxb_fish
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功