掌握并精通 作为项目经理,选择项目管理工具和惯例是您要做的最重要决策
从头开始一个新的 J2EE 项目既充满刺激又富有挑战。您在项目之初所做的决策将对整个项目过程产生巨大影响。因此,良好的项目管理习惯通常从一开始就可确保项目的成功。 如果您在管理 J2EE 项目,那么您至少要坚定、明确地回答六个关键的项目管理问题:
在本文中,我将指出您(作为项目主管)为了回答这些问题并使项目成功可以采取的一些措施(使用 Oracle JDeveloper 支持的开放源代码项目管理工具)。我还将提供一个简短的教程,以使您能够使用 Maven 来开始项目和代码管理,以创建一个可供使用的基于 Strut 的项目。 在一篇文章中面面俱到地介绍所有这些主题非常困难,但我希望能够足够详细地介绍一些较重要的主题来帮助您入门。 做出选择 构建过程是任何 J2EE 项目的关键部分,有许多构建工具可供选择。 对本文而言,我们的讨论将围绕最流行的两种 J2EE 构建工具:Maven 和 Ant。 Maven 和 Ant 是由 Apache Software Foundation 提供的开放源代码项目,在它们之间进行选择是项目主管要做的最重要的决策之一。Maven 旨在帮助开发人员以一致的方式轻松构建、测试 Java 项目以及为 Java 项目编制文档。它是一种强大的工具,有助于在整个项目周期内对项目进行管理。 Ant 是 Java 领域最流行的构建工具。它是一种非常灵活的工具;不过,这种灵活性付出了代价的。许多企业项目深受庞大的 Ant 脚本之苦,在构建者离开团队之后很难管理这些脚本。 为了帮助您在这些工具之间做出选择,下面提供了一些高级比较:
如果您明白自己的目标并想绝对控制构建机制,那我建议您选择 Ant。但是,如果您不确定您的项目结构并在构建系统方面经验不足,那就选择 Maven。Maven 将为您提供良好的项目布局以及优秀的工具,在整个项目周期内为您提供帮助。 通过学习本文和使用 Maven,您将接触到一套很好的工具、很好的软件过程和很好的项目布局。不过,如果您希望转至 Ant,那么将您使用的 Maven 目标重写为 Ant 目标将非常容易。对于简单的构建,从 Maven 转换为 Ant 只需几个小时,因此可以放心大胆地在项目的后续阶段中继续使用 Maven。 团队协作 我们为客户端提供的主要是产品品质的代码。为了达到这个目标,整个团队一起协作至关重要,并且有大量的源代码配置管理 (SCM) 工具可用来实现这个目标。 例如,开放源代码的并发版本控制系统 (CVS) 可能是最流行的 SCM 软件。它默认安装在许多 Unix/Linux 系统上,并且有一个非常好的 Windows 版本,名为 CVSNT。
因为本文专注于企业项目,因此您可能想创建您自己的 Maven 信息库。我强烈推荐使用 Maven 代理,它将透过您的企业防火墙连接到互联网上的全球 Maven 信息库。当您创建了您自己的企业信息库时,您可以轻松地在其中存储自己的 JAR 文件。(目录布局很清楚,它只是模拟了 Maven Proxy 创建的结构而已。) Maven 还提供了一个称为 StatCVS 的插件,它生成项目的 CVS 信息库的一个完整报表,其中包括许多显示开发人员活动的图形。 Maven 项目对象模型 (POM) Maven 使用项目对象模型 (POM) 来存储项目的信息。该信息包括项目的名称、描述、开发人员、SCM 系统等。POM 是一个简单的 XML 文件,其详细信息请见 http://maven./reference/project-descriptor.html。 因为 POM 是一个 XML 文件,所以您可以用 Oracle JDeveloper 对其进行编辑。不过,我们稍后将使用的 Maven JDeveloper 插件将从当前项目中删除 project.xml 文件 — 这不是多大的问题,因为您可以快速地将其重新导入。 从项目中获得反馈 管理 J2EE 项目时另一个重要考量就是,您需要了解项目的状态。但是,您没有时间去验证您的团队所开发或签入的每个文件。 解决方法是与您的团队进行沟通和使用适当的报告工具。 当然,首要的还是经常与开发人员沟通。不过,反馈不一定总要面对面地进行。有大量自动报告工具可供使用,如 CruiseControl、JUnit、Checkstyle 或 StatCVS,这些工具能够使您了解项目的当前状态。就本文而言,讨论持续集成和 CruiseControl 的价值将非常有帮助。 结合使用 CruiseControl 和 Maven持续集成是 Martin Fowler 首先采用的一种最佳实践,它可以归纳为“定期自动构建和测试项目是一个不错的主意”。这个概念已被全球的公司所认可。 持续集成在几个人在同一项目上一起工作时特别有用,因为他们将定期得到最新的项目状态并将收到来自 CruiseControl 以电子邮件发送的错误通知。 CruiseControl 是最受欢迎的持续集成工具,我衷心推荐它。CruiseControl 完全能够处理 Maven 管理的项目。Maven 还为配置 CruiseControl 提供了一个插件。该插件可以轻松地创建 CruiseControl 配置文件,并且还可以用来管理 CruiseControl 的运行。 另一个有用的 Maven 插件 Checkstyle 将帮助您的项目遵循编码标准。可以将 Checkstyle 报告包含在 CruiseControl 中,以使任何提交非标准代码的人都将中断构建。要将这些报告添加到您的项目文档中,只需将它们添加到您的 project.xml 文件的 <reports/> 部分中。 管理一次单击构建/部署周期 构建和部署应用程序可能花费几个小时,并且可能需要几个手动步骤。开发人员厌烦了漫长的构建周期时间和手动干预。一天要用几个小时来等待应用程序进行构建和部署。这些延迟带来的失落感无以言表。 解决办法是建立一个“一次单击构建和部署周期”过程。当正确使用时,构建工具(如 Maven 或 Ant)将构建过程转换成在开发人员的 IDE 中的一次单击。这些工具还可以自动将项目部署到您选择的应用服务器上。 该解决方案有一个附加的好处:它不仅使开发人员的任务变得更轻松,而且一旦定义了一个简洁的过程来打包应用程序,提交给客户端的软件就将有更高的质量(不再有遗忘的文件或未编译的 JSP)。 就本文而言,您的一次单击部署周期还将生成相应的项目文档,这将非常有帮助。Maven 以其生成的项目文档而著称。只需使用 maven site:generate 目标即可创建当前项目的文档。生成的 web 站点看起来有点类似下面显示的屏幕截图:
开发多个项目 随着项目复杂度的增加,很有可能将项目分成几个较小的项目。结果是:项目管理时间成倍增加。每个小项目都需要管理。 解决方案是对不同项目使用一致的构建机制,并创建一个“主项目”来包含这些较小的项目。虽然用 Maven 可以很容易实现这一点(因为它强制您采用其项目布局),但对于 Ant 开发人员来说,就需要某种形式的规范了。对于 Ant,有两个建议:
另一个更复杂的问题是需要以给定的顺序来构建这些项目,并且一个项目的失败将触发其附属的子项目的失败。让我们举个例子,其中您将使用:
在这种情况下,myutility.jar 的构建过程中的失败将触发所有项目的失败。而 myweb.war 的失败将只触发最后的 myear.ear 的失败。 管理这种项目相依性可以用手动方式(如果只有少数几个项目)也可以用自动方式(使用 Maven Reactor)。 打包 J2EE 项目 在许多 J2EE 项目中需要创建存档文件 — 如 WAR、JAR 或 EAR — 用于提交给客户端。 如果您按照以前的问题的解决方案来进行操作,那么您将遇到两个相当迥异的挑战:
这是 IDE(如 Oracle JDeveloper)能够派上用场的地方。然而,如果您不希望依赖于 IDE,那么可以从 Ant 和 Maven 内部运行 XDoclet(一个代码生成工具)来生成前面提到的部署描述符。 我现在为您提供一个简短的教程来使您能够开始使用 Maven 和 Oracle JDeveloper。在构建过程中获得快乐! 管理代码教程 现在,我们开始使用 Maven 并创建一个可供使用的基于 Strut 的项目。 启动项目 Maven 可以从 http://maven./ 上下载。安装非常简单,并且在 http://maven./start/install.html 上提供了全面的文档。
Maven 自带大量的插件,这些插件将自动通过互联网进行安装。(请参见“Maven 项目信息库”部分。) Maven genapp 插件 Maven genapp 插件将帮助快速启动基于 Struts 的应用程序。运行 maven genapp 并使用“struts”项目模板,如以下屏幕截图所示:
您现在就拥有了一个能够实际应用的基于 Struts 的 web 应用程序。要创建项目的 WAR 文件,只需输入“maven war”。该项目有一个简单的 POM (project.xml) 文件,您可以根据需要来编辑它。 Maven JDeveloper 插件使用 Maven JDeveloper 插件将项目导入 Oracle JDeveloper 中。正如插件的文档中所说明的那样,需要设置一些属性:
|
|