级别: 中级 Diane Bowker (dbowker@us.ibm.com), WebSphere System House Team, IBM RTP Lab David Leigh (dleigh@us.ibm.com), WebSphere System House Team, IBM RTP Lab Mark Wainwright (markwain@us.ibm.com), WebSphere System House Team, IBM RTP Lab
2004 年 4 月 01 日 本文是三篇关于在 WebSphere Studio 中自动构建的文章中的第一篇,它为您介绍了如何运用 Ant 和特定的存储库在“干净”的环境中执行无人值守的集中日常构建。
'
引言
在大多数大型软件开发项目中,多个开发人员独立地编写大量的源代码组件,这些组件最终进行编译、打包并交付给测试人员或最终用户。编译和打包过程通常称为软件构建。开发项目的成功与否部分取决于构建过程的准确性、可靠性和可重复性。每个构建都必须使用正确版本的源代码文件、依赖性库模块以及编译和汇编工具。确保每个构建的准确性、可靠性和可重复性的最好方法就是使构建过程自动化。然而,构建自动化需要有自己的一套脚本和批处理文件,而且实现自动化的代码的复杂性随着应用程序大小和复杂性的增加而成倍增加。为了向这一问题提出挑战,这个由三部分组成的系列文章描述了一种构建自动化的有效方法,这种方法使用的是
IBM® WebSphere® Studio Application Developer(以下简称 Application Developer)和
Ant 开放源代码工具。
Application Developer 是一种用于开发电子商务应用程序的 IBM 开发环境。在
Application Developer 工作台中,您可以编写、编译和对源代码进行单元测试,同时还可以与软件版本控制系统(也称为软件配置管理系统或
SCM)交互,以便向中央代码存储库登记所修改的文件。Application Developer
通过提供能够进行扩展和自定义的验证、编译和装配任务来支持软件构建过程。Application Developer 还可以以批处理方式(或 headless
模式)运行,而这正是构建自动化所需要的。 我们的构建自动化过程利用了 Application Developer 的 Ant
能力。这种能力已经通过使用前面的文章
Using Ant with WebSphere Studio Application Developer
所描述的 antextras 包进行了扩展。本文讲解了如何在 headless 模式下运行 Ant,并提供了这样做所需的示例代码。这个由三部分组成的文章系列为您展示了如何使用在前面的文章中描述的工具和方法来构建一个完全自动化的构建过程。
本文(第 1 部分)以外的其他部分讲解了自动化构建的整个方法(其中包括开发人员需要做些什么)以及对构建人员所使用的工具的描述。系列文章的第
2 部分描述了如何使用 Application Developer V4 和代码存储库 CVS 来完成构建自动化。第
3 部分描述了如何使用 Application Developer V5 和代码存储库 IBM Rational® ClearCase
来完成构建自动化。
方法
当使用 Application
Developer 环境时,您工作在一个工作区之中,这个工作区包含各种项目,这些项目又包含源代码文件、已编译的对象文件和数据文件(如
J2EE 部署描述符文件)。项目还包含元数据文件,这些元数据文件包含 Application Developer 在编译和打包可执行项目时所需要的信息,包括项目的库依赖性、构建路径信息以及包含在打包的项目中的文件清单。项目通常是自包含的,但也可能包括对象中的引用或依赖性,这些对象可以是该工作区中的其他项目内的对象,也可以是该工作区外的对象。您可以将在一工作区中构建的项目导入到不同的机器上的另一个工作区中,假设对其他项目或对外部对象的任何引用在新的工作区中也可用。可以保证用这种方式成功地导入到新的工作区中的项目与最初的项目具有完全一样的构建。
我们的自动化构建过程利用了Application Developer
项目的自包含性质来确保构建的准确性。在开发人员的工作区中构建、编辑和进行单元测试的项目被复制到 SCM 中。自动构建过程将这些项目从 SCM 导入到一个新创建的工作区中,在其中进行构建,并随后将构建所产生的构件导出到合适的位置上。如果构建工作区环境有访问导出的项目所需的全部外部对象的权限,则可以保证构建是准确的。 下面简要概述了这一文章系列所描述的方法: - 开发人员在 Application Developer 工作区中开发他们的项目,在工作区中,他们可以创建代码、进行更改和单元测试。如果对他们的代码感到满意,开发人员就可以将他们的项目复制到 SCM 中。
- 构建人员将任何新构建的项目的名称加入构建中包括的项目列表。
- 自动过程定期在一个单一的、批处理模式(headless)的 Application Developer Ant 会话中运行和执行以下任务:
- 将要包含在构建中的所有项目从 SCM 解压缩到一个本地目录中
- 构建一个新的 Application Developer 工作区
- 将每个项目导入到此新工作区中
- 依次构建每个项目
- 将任何构建时错误写入日志输出文件
- 将可执行项目导出到一个恰当的位置,这可以是一个 FTP 站点,也可以是一个挂载的文件系统中
以上过程要求: - SCM 包含所有源文件和所有对象元数据文件(例如,
.classpath)。 - 所有在
.classpath 中指定的依赖性外部库在自动工作区中可用。 - 在自动工作区中包含所有依赖性对象。
对开发人员的要求
首先,在使用
Application Developer 中的 Project => Build
选项时,您必须确保您的项目在它们自己的工作台中成功构建完毕。 自动构建过程要求 SCM
包含完整的对象副本,包括所有的源文件和所有的对象元数据文件(例如,.classpath)。对象元数据文件通常根据工作台的参数选择被隐藏而看不到,这样可能导致在复制文件或在
SCM 中登记时忽略了它们。因此,开发人员必须保证 SCM 包含他们的源代码和对象元数据文件的最新副本。
在生成引用了工作区以外的库的对象时,开发人员必须与构建人员进行沟通,以确保这些外部库在执行自动构建的机器上也可用。使用工作区变量而不对这些引用中的路径字符串进行硬编码始终是一个很好的主意,因为这样做就可以使这些库的位置没有必要同样在构建机器上。例如,如果一个对象的 CLASSPATH
包含一个对 JAR 文件 dependantJar.jar 的引用(它包含在开发人员的机器的 E:\myJars\dependantJar.jar
中),那么开发人员就必须创建一个称为 ${myJars} 的工作区变量(它包含字符串“E:\myJars”)。这样 CLASSPATH
引用就会包含 ${myJars}\dependantJar.jar,然后构建机器将 dependantJar.jar
放在任何方便的位置,并恰当地设置 ${myJars}。 如果在构建一个工作区对象时还需要其他的构建自定义,而这
Application Developer 并不提供,例如,批处理文件执行,那么就必须通过“External Tools”工具将它并入
Application Developer 工作区中。
自动安装
为了能够运行自动构建过程,构建机器必须安装 Application Developer,并且拥有对 SCM
的读访问权限,以便它能够下载待构建的对象。根据构建输出文件所在位置的不同,构建机器可能还需要挂载一个网络文件系统或者拥有对一个目的目录的 FTP
访问权限。 自动化构建过程的其余安装在 Application Developer V4 和 V5 中是不同的,在本文章系列的第 2
部分和第 3 部分相应地描述了这些安装细节。
结束语
因为整个软件开发过程依赖于软件构建,所以有一个准确、可靠、可重复以及可维护的构建过程所带来的好处不容小觑。使用
Application Developer 并利用本系列文章所描述的技术将会有助于您认识到这些好处。本系列文章的第
2 部分将会为您展示在使用 CVS 作为存储库的情况下如何进行自动构建。其中包含一个样本项目以及 Ant
脚本和包装器代码,可以利用它们来从命令行运行构建。
作者简介  | |  | Diane Bowker 在位于 NC,Durham 的 IBM RTP Lab 中的 WebSphere System House Team 工作,他是 IT 服务器和应用程序支持项目的一名负责人。您可以通过dbowker@us.ibm.com 取得联系 |
 | |  |
David Leigh 在位于 NC,Durham 的 IBM RTP Lab 中的 WebSphere System House Team 工作,他是一名解决方案测试架构师。您可以通过 dleigh@us.ibm.com 与 David 取得联系。 |
 | |  |
Mark Wainwright 在位于 NC,Durham 的 IBM RTP Lab 中的 WebSphere System House Team 工作,他是一名解决方案测试架构师。您可以通过 markwain@us.ibm.com 与 Mark 取得联系。 |
对本文的评价
|