“Jesse和Eric可以教你如何使用当前的Ant,他们做得相当棒。这本书提供了颇有深度的信息,对于一些以往从未考虑到的工作,书中还介绍了如何扩展Ant来完成这些工作的详细内容。不论你是偶尔使用Ant,还是需要管理各种大型工程,这都是一本需要持之在手的工具书。”
序
前言
第一章 Ant入门
文件和目录
Ant的构建文件
运行Ant
Ant命令行参考
构建文件轮廓
继续学习
第二章 安装和配置
发布
安装
配置
第三章 构建文件
为什么用XML?
Ant构建块
一个示例工程及构建文件
构建文件执行处理
Ant并非脚本语言
构建文件授权问题
第四章 AntDataType
已定义DataType
XML属性约定
argument DataType
environment DataType
filelist DataType
fileset DataType,
patternset DataType
filtersetDataType
path DataType
mapperDataType
第五章 用户编写任务
定制任务的需要
Ant的任务模型
任务生命期
通过分析看示例:jar任务
关子任务的其他内容
第六章 用户编写监听者
BuildEvent类
BuildListencr接口
一个例子:XmlLogger
并行问题
第七章 核心任务
任务总结
常用类型和属性
工程和目标
核心任务参考
第八章 可选任务
任务汇总
可选任务参考
附录一 Ant的未来
附录二 Ant解决方案
词汇表
对于许多基于Java的工程而言,对所有JavaTM源文件进行编译已不再是构建这些工程所需的惟一步骤.对于典型的HelloWorld程序.书中的例子以及简单applet,源文件的编译就已经足够了.但是还有一些复杂的基于Java的工程,如Web应用或基于Swing的程序(如JBuilder),要求做更多的工作.必须根据资源控制得到最新的资源,未由Java编译器自动处理的依赖关系也需要得到管理,各种类必须被捆绑并交付到多个位置,有时是作为JAR或WAR文件进行交付,某些Java技术,诸如EJB(Enterprise JavaBean,企业Java Bean)和RMI(Remote Method lnvocation,远程方法调用)类,则需要单独的编译和代码生成步骤,这些均并非由Java编译器完成.shell脚本和GNUMake通常是完成这些任务的首选工具,从“完成工作”的角度来说,这些工具可以很好地达到目的,但从长远来看,它们却是不太好的选择.
虽然GNUMake可以捉供许多功能,但在易用性方面,却存在许多缺陷.makefile有其自己的语言语法,这就要求编写makefile的人具备此项专门的知识.GNU Make还缺乏平台无关性,因此对于同一个makefile,需要维护和分发多个版本(每一个版本对应于一个目标平台).由于shell脚本和GNUMake(要记住,GNU Make只是现有shell基础上的一个语言扩展)所固有的性质,使得对于任何一个非专家级用户来说,在操作系统之间(甚至shell之间)进行迁移都是很困难的,甚至是不可能的.如果使用GNUMake,那么对于当前基于Java的工程,遵循这种做法所需的时间和维护开销是相当高的,这种情况可谓屡见不鲜.
Sun公司对其所有SDK工具均提供了Java版本.诸如javac等可执行程序只是执行Java代码的包装器.其他厂商的工具,如BEA公司的用于WebLogic的EJB编译器.JUnit和Jakarta工具以及库均采用Java编写.GNUMake只能从命令行调用可执行程序.例如,为了调用一个Java类,GNUMake必须使用java命令来调用JVM,再将类名作为命令行参数进行传递.Make不能在程序中使用Java工具的任何库,如异常和错误对象等,而这些库则允许更为灵活的构建过程.对于用Java编写的工具(如WebLogic的ejbc编译器),它们可以与同一JVM中可用的其他对象(如Ant任务对象)共享来自于异常和错误的信息.较之于命令行返回代码和事后的错误消息字符串解析而言,这样做可以改进构建过程.
GNU Make所存在的问题和用Java编写构建工具的可能性促使James Duncan Davidson写出了Ant.Ant将Java编译器作为一个类运行,而不是来自命令行的一个调用.保持在JVM中则允许用特定的代码处理错误,还可对Sun公司通过其编译器提供的结果采取操作.Ant用XML作为其构建文件语法,因此只是会增强开发人员和工程管理人员的技能,而不是令其因学习新知识而过于疲劳.Ant对构建过程加以扩展,使其不只是运行程序,因此称之为构建环境(environment)比构建工具更为恰当.
本书的结构
本书涵盖了初识Ant的人所需的全部知识.对于Ant专家来说,本书可作为一本参考书,其中提供了Ant核心任务的详细定义,讨论了Ant的主要特性,提供了用Ant来管理工程的一些最佳实践,还解释了某些Ant问题的解决方法.
第一章,Ant入门.这一章逐步介绍了一个非常基本的Ant构建文件示例,其目的是使你能够很快上手.我们展示了如何创建目录.编译代码以及生成一个JAR文件,但是对于每一项工作如何进行的具体细节则未做深究.这一章还包括了Ant命令行使用的详细信息.最后得到一个构建文件的大致轮廓,以此作为初始模板.
第二章,安装和配置.这一章介绍了如何得到.安装以及在Windows和Unix平台上配置Ant.我们列出了在这些开发平台上发现的一些缺陷,并提供了解决方法和解决方案.
第三章,构建文件.这一章介绍了一个示例工程上下文中的Ant构建文件例子.我们对此构建文件的主要部分和结构加以了剖析和描述,还对一些问题做了解释,如Ant引擎的一般流程和Ant使用XML的好处等,并强调了构建文件的主要部分.
第四章,AntDataType.这一章详细描述了各种AntDataType.尽管在前面的章节中已经用到过DataType,但这里才对其做深入研究.我们介绍了如何使用环境变量和如何传递命令行参数以进行处理,还说明了如何利用各种文件和模式.
第五章,用户编写任务.这一章涵盖了Ant的一个最佳功能,即能够对Ant进行扩展.有此编写扩展的功能,就能够处理特定工程可能需要的任何事情.作为一个意外收获,你还可以在将来的工程中重用这些任务,对于你所付出的努力,你的收益将并不仅限于最初的实现.你的任务还可以得到共享并公开发布,这样即使是你不认识的人也能够由于你的工作而受益.
第六章,用户编写监听者.这一章介绍了如何设计和开发你自己的构建事件监听者.据此,你就可以编写类来完成一些操作,这些操作所基于的是与构建文件处理相关的流程.操作的范围很广,从特定复杂任务完成时的发送邮件,到将同样的事件重定向到一个集中的“构建监听框架”等均属于此范畴.正如用户编写任务一样,可能的用户编写监听者也是无法计数的.这一章还包括对监听者的进一步扩展:用户编写日志工具(logger).利用这些日志工具,可以改进甚至替换Ant默认的日志系统.
第七章,核心任务.这一章是对全部核心Ant任务的详尽参考.对于每个任务,在此都可以看到一个描述.一组支持此任务的Ant版本以及对所有任务属性的定义.从这里还可以得到有关任务使用的有用示例.
第八章,可选任务.这一章的形式类似于第七章,是对Ant丰富的可选任务所提供的参考.
附录一,Ant的未来.这一部分所讨论的正如其标题所示.我们介绍了Ant未来的方向和将出现的新功能,另外还提供了有关建议,你可通过采取所建议的步骤来避免使用很快就要过时的功能.
附录二,Ant解决方案.Ant可用于解决不同的构建问题,这一部分则深入研究了其中所采用的更为常见的方法.除此以外,我们还谈到如何使用带有级联工程结构的构建文件.这些工程结构有一个主工程目录以及许多手工程子目录.每个子工程包括其自己的构建文件,而且主工程有一个主构建文件,能够构建所有子工程.
本书的读者对象
本书主要面向Java开发人员,特别是那些开发企业级Java应用的人员.另外,如果某些人需要一个健壮的构建工具,并要求这种工具不只是调用命令行编译器和实用程序,那么这本书对其尤为适用.对于大型工程的构建管理人员(以及负责构建管理的工程管理人员)来说,这本书也很有用.
预备知识
对于本书的大多数内容,仅需要对Java和XML有基本的了解即可.有关为Ant编写扩展的章节则要求你还应对Java继承和接口有明确的理解.Ant最适合用于构建和部署基于Java的工程.有些Ant任务可以提供功能来编译和运行其他语言,如Perl.Python.C和C#,尽管这些任务也可用,但本书所强调的是Java在Ant中的使用.
平台和版本
作为Apache的Jakarta项目下的一个开源项目,Ant得到“每晚(nightly)”代码修订和构建.这些每晚构建即创建了Ant的“非稳定版本”.主要维护人员时常会以一个每晚构建作为发布版,并宣布其功能和稳定性.在写这本书时,共有5个此类版本,即1.1.1.2.1.3.1.4和1.4.1.这本书主要关注1.4.1版本,它于2001
年10月发布.有些任务(如copydir)在1.2版本以后已经不用,但在本书中仍会涉及,因为它们并未从核心任务表中被完全去除.