分享

第 2 周(共 12 周):管理 J2EE 项目

 ekylin 2006-02-11

掌握并精通
作者:Julien Dubois

作为项目经理,选择项目管理工具和惯例是您要做的最重要决策

从头开始一个新的 J2EE 项目既充满刺激又富有挑战。您在项目之初所做的决策将对整个项目过程产生巨大影响。因此,良好的项目管理习惯通常从一开始就可确保项目的成功。

如果您在管理 J2EE 项目,那么您至少要坚定、明确地回答六个关键的项目管理问题:

  • “应当使用哪种构建工具?”
  • “如何使一组人在一个共享代码库上协同工作?”
  • “如何让自己以及团队成员了解项目的状态?”
  • “如何使构建过程简化为一次单击操作?”
  • “如何简化多个项目的管理?”
  • “如何管理 J2EE 软件的存档?”

在本文中,我将指出您(作为项目主管)为了回答这些问题并使项目成功可以采取的一些措施(使用 Oracle JDeveloper 支持的开放源代码项目管理工具)。我还将提供一个简短的教程,以使您能够使用 Maven 来开始项目和代码管理,以创建一个可供使用的基于 Strut 的项目。

在一篇文章中面面俱到地介绍所有这些主题非常困难,但我希望能够足够详细地介绍一些较重要的主题来帮助您入门。

做出选择

构建过程是任何 J2EE 项目的关键部分,有许多构建工具可供选择。 对本文而言,我们的讨论将围绕最流行的两种 J2EE 构建工具:Maven 和 Ant。

MavenAnt 是由 Apache Software Foundation 提供的开放源代码项目,在它们之间进行选择是项目主管要做的最重要的决策之一。Maven 旨在帮助开发人员以一致的方式轻松构建、测试 Java 项目以及为 Java 项目编制文档。它是一种强大的工具,有助于在整个项目周期内对项目进行管理。

Ant 是 Java 领域最流行的构建工具。它是一种非常灵活的工具;不过,这种灵活性付出了代价的。许多企业项目深受庞大的 Ant 脚本之苦,在构建者离开团队之后很难管理这些脚本。

为了帮助您在这些工具之间做出选择,下面提供了一些高级比较:

  Ant Maven
安装 非常容易 非常容易(与 Ant 非常相似)
启动新项目的时间 5 分钟 15 分钟
添加新功能的时间 添加一个新目标需 10 分钟 使用一个新目标需 2 分钟
新开发人员学习所需的时间 30 分钟。非常易于理解,非常好的工具支持。 2 小时。开始时可能让人困惑。
标准布局 无(好处是您有很大的灵活性)。 有(好处是所有项目具有相同的外观)。
多项目支持 有,但您必须创建自己的主构建文件。 有,由 Maven Reactor 实现
文档生成 执行这一操作没有标准方法,但有大量工具可供使用。
IDE 集成 非常基础

如果您明白自己的目标并想绝对控制构建机制,那我建议您选择 Ant。但是,如果您不确定您的项目结构并在构建系统方面经验不足,那就选择 Maven。Maven 将为您提供良好的项目布局以及优秀的工具,在整个项目周期内为您提供帮助。

通过学习本文和使用 Maven,您将接触到一套很好的工具、很好的软件过程和很好的项目布局。不过,如果您希望转至 Ant,那么将您使用的 Maven 目标重写为 Ant 目标将非常容易。对于简单的构建,从 Maven 转换为 Ant 只需几个小时,因此可以放心大胆地在项目的后续阶段中继续使用 Maven。

团队协作

我们为客户端提供的主要是产品品质的代码。为了达到这个目标,整个团队一起协作至关重要,并且有大量的源代码配置管理 (SCM) 工具可用来实现这个目标。

例如,开放源代码的并发版本控制系统 (CVS) 可能是最流行的 SCM 软件。它默认安装在许多 Unix/Linux 系统上,并且有一个非常好的 Windows 版本,名为 CVSNT

“在 IDE 和 SCM 工具之间切换容易出错且费时。”
当启动项目时,请确保:

  • 您的 IDE 与 SCM 系统协调工作。在 IDE 和 SCM 工具之间切换容易出错且费时,特别是在您管理成千上万的源文件时。(Oracle JDeveloper 完全支持 CVS 并提供单一工作窗口;因此您可以避免工具间的切换。)
  • 您了解 SCM 软件的基本原则,例如标记和分支。
  • 您的源代码信息库留有备份并易于访问。如果代码同步太慢,开发人员是不会使用它的。
  • 您已教会开发人员如何使用该系统。
  • 您已指示您的开发人员经常同步代码。
Maven 项目信息库Maven 的原则是仅将源文件存储在 SCM 系统中,而将库(例如 struts.jar、log4j.jar 等)存储在 Maven 信息库(一个远程目录,其中的文件按项目和版本存储)中。这项任务最初似乎有些麻烦,但管理项目的许多依赖关系是一项令人畏惧的任务,而 Maven 用一种非常优雅的方式解决了它。

因为本文专注于企业项目,因此您可能想创建您自己的 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 站点看起来有点类似下面显示的屏幕截图:

图 1

开发多个项目

随着项目复杂度的增加,很有可能将项目分成几个较小的项目。结果是:项目管理时间成倍增加。每个小项目都需要管理。

解决方案是对不同项目使用一致的构建机制,并创建一个“主项目”来包含这些较小的项目。虽然用 Maven 可以很容易实现这一点(因为它强制您采用其项目布局),但对于 Ant 开发人员来说,就需要某种形式的规范了。对于 Ant,有两个建议:

  • 使用命名惯例(“compile”用于编译项目,“dist”用于创建发布版本)
  • 使用由 Ant 1.6 提供的新的 <import/> 任务:创建一个将在每一个子项目中导入的通用 Ant 脚本。(这看起来很像 GoF 的“模板方法”设计模式。)

另一个更复杂的问题是需要以给定的顺序来构建这些项目,并且一个项目的失败将触发其附属的子项目的失败。让我们举个例子,其中您将使用:

  • 一个称为 myutility.jar 的实用程序类库
  • 许多 EJB,打包在一个称为 myejbs.jar 的 jar 文件中,并且它们使用 myutility.jar 的类
  • 一个 web 存档(称为 myweb.war),它使用 myejb.jar 和 myutility.jar
  • 一个打包了前面提到的 3 个资料库的 EAR 文件(称为 myear.ear)。

在这种情况下,myutility.jar 的构建过程中的失败将触发所有项目的失败。而 myweb.war 的失败将只触发最后的 myear.ear 的失败。

管理这种项目相依性可以用手动方式(如果只有少数几个项目)也可以用自动方式(使用 Maven Reactor)。

打包 J2EE 项目

在许多 J2EE 项目中需要创建存档文件 — 如 WAR、JAR 或 EAR — 用于提交给客户端。

如果您按照以前的问题的解决方案来进行操作,那么您将遇到两个相当迥异的挑战:

  • 创建 EAR 很复杂,尤其是当涉及多个项目时。一个 EAR 只是一个包含几个 WAR 和 JAR 的项目。
  • 用 Maven 或 Ant 来创建 WAR 和 JAR 非常容易,但您如何管理各种部署描述符?

这是 IDE(如 Oracle JDeveloper)能够派上用场的地方。然而,如果您不希望依赖于 IDE,那么可以从 Ant 和 Maven 内部运行 XDoclet(一个代码生成工具)来生成前面提到的部署描述符。

我现在为您提供一个简短的教程来使您能够开始使用 Maven 和 Oracle JDeveloper。在构建过程中获得快乐!

管理代码教程

现在,我们开始使用 Maven 并创建一个可供使用的基于 Strut 的项目。

启动项目

Maven 可以从 http://maven./ 上下载。安装非常简单,并且在 http://maven./start/install.html 上提供了全面的文档。

图 1

Maven 自带大量的插件,这些插件将自动通过互联网进行安装。(请参见“Maven 项目信息库”部分。)

Maven genapp 插件

Maven genapp 插件将帮助快速启动基于 Struts 的应用程序。运行 maven genapp 并使用“struts”项目模板,如以下屏幕截图所示:

图 2

您现在就拥有了一个能够实际应用的基于 Struts 的 web 应用程序。要创建项目的 WAR 文件,只需输入“maven war”。该项目有一个简单的 POM (project.xml) 文件,您可以根据需要来编辑它。

Maven JDeveloper 插件使用 Maven JDeveloper 插件将项目导入 Oracle JDeveloper 中。正如插件的文档中所说明的那样,需要设置一些属性:

  • 在您的主目录中创建“build.properties”文件。
  • 设置文档所需的属性。

    例如,下面是我自己的 build.properties 的屏幕截图:

    图 3

    您可以任意多次地运行“maven jdeveloper”目标;它将从 Maven 的 project.xml 文件中更新您的 Oracle JDeveloper 配置。

    例如,它将自动配置 JDeveloper 的库。

    图 4

    在 JDeveloper 内部运行 Maven从 Oracle JDeveloper 内部运行 Maven 以使运行 Maven 不需要启动新的控制台窗口,这可能非常有用。下面的屏幕截图说明了 Oracle JDeveloper 中的一个新按钮的“maven dist”目标的配置。您将通过选择 Tools 菜单的 External Tools 然后选择 Add 来开始这个过程。

    图 5_1
    第 1 步(共 4 步):选择 Maven 可执行文件(选择“dist”目标)

    图 5_2
    第 2 步(共 4 步):选择如何显示 Maven 快捷方式

    图 5_3
    第 3 步(共 4 步):指定该快捷方式将出现在 JDeveloper 中的位置

    图 5_4
    第 4 步(共 4 步):选择该快捷方式何时将可用

    您现在即可从 Oracle JDeveloper 内部运行 Maven 了,如以下屏幕截图所示:

    图 6

    Maven 控制台如果您对使用控制台的偏爱仅次于 Oracle JDeveloper,那么我强烈推荐您使用 Maven 控制台插件。它将一次性启动 Maven,并将等待指令。结果,运行目标要快得多(与 Ant 相比)了。

    图 7

    总结

    创建新的 J2EE 项目是一次非常丰富的体验。需要掌握整个构建周期(从管理源代码文件到部署打包的应用程序)。幸运地是,有一套丰富的工具可以帮助项目经理取得成功。

    Maven 是一个强大的构建工具,可以与 Oracle JDeveloper 很好地集成。它的设置相当简单,并且得益于它预先配置的插件,Maven 将提供比同等解决方案(如 Ant)更大的时间收益。对于经验较少的开发人员和团队主管,Maven 的额外好处是鼓励他们遵循大量的最佳实践。最后一点但相当重要,使用 Maven 保证了全面的项目文档持续可用性,这正是众多企业项目所缺乏的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多