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

来源:百度文库 编辑:神马文学网 时间:2024/04/27 21:25:25
掌握并精通
作者:Julien Dubois
作为项目经理,选择项目管理工具和惯例是您要做的最重要决策
从头开始一个新的 J2EE 项目既充满刺激又富有挑战。您在项目之初所做的决策将对整个项目过程产生巨大影响。因此,良好的项目管理习惯通常从一开始就可确保项目的成功。
如果您在管理 J2EE 项目,那么您至少要坚定、明确地回答六个关键的项目管理问题: “应当使用哪种构建工具?” “如何使一组人在一个共享代码库上协同工作?” “如何让自己以及团队成员了解项目的状态?” “如何使构建过程简化为一次单击操作?” “如何简化多个项目的管理?” “如何管理 J2EE 软件的存档?”
在本文中,我将指出您(作为项目主管)为了回答这些问题并使项目成功可以采取的一些措施(使用 Oracle JDeveloper 支持的开放源代码项目管理工具)。我还将提供一个简短的教程,以使您能够使用 Maven 来开始项目和代码管理,以创建一个可供使用的基于 Strut 的项目。
在一篇文章中面面俱到地介绍所有这些主题非常困难,但我希望能够足够详细地介绍一些较重要的主题来帮助您入门。
做出选择
构建过程是任何 J2EE 项目的关键部分,有许多构建工具可供选择。 对本文而言,我们的讨论将围绕最流行的两种 J2EE 构建工具:Maven 和 Ant。
Maven 和Ant 是由 Apache Software Foundation 提供的开放源代码项目,在它们之间进行选择是项目主管要做的最重要的决策之一。Maven 旨在帮助开发人员以一致的方式轻松构建、测试 Java 项目以及为 Java 项目编制文档。它是一种强大的工具,有助于在整个项目周期内对项目进行管理。
Ant 是 Java 领域最流行的构建工具。它是一种非常灵活的工具;不过,这种灵活性付出了代价的。许多企业项目深受庞大的 Ant 脚本之苦,在构建者离开团队之后很难管理这些脚本。
为了帮助您在这些工具之间做出选择,下面提供了一些高级比较:
AntMaven
安装非常容易非常容易(与 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.apache.org/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 文件的 部分中。
管理一次单击构建/部署周期
构建和部署应用程序可能花费几个小时,并且可能需要几个手动步骤。开发人员厌烦了漫长的构建周期时间和手动干预。一天要用几个小时来等待应用程序进行构建和部署。这些延迟带来的失落感无以言表。
解决办法是建立一个“一次单击构建和部署周期”过程。当正确使用时,构建工具(如 Maven 或 Ant)将构建过程转换成在开发人员的 IDE 中的一次单击。这些工具还可以自动将项目部署到您选择的应用服务器上。
该解决方案有一个附加的好处:它不仅使开发人员的任务变得更轻松,而且一旦定义了一个简洁的过程来打包应用程序,提交给客户端的软件就将有更高的质量(不再有遗忘的文件或未编译的 JSP)。
就本文而言,您的一次单击部署周期还将生成相应的项目文档,这将非常有帮助。Maven 以其生成的项目文档而著称。只需使用 maven site:generate 目标即可创建当前项目的文档。生成的 web 站点看起来有点类似下面显示的屏幕截图:

开发多个项目
随着项目复杂度的增加,很有可能将项目分成几个较小的项目。结果是:项目管理时间成倍增加。每个小项目都需要管理。
解决方案是对不同项目使用一致的构建机制,并创建一个“主项目”来包含这些较小的项目。虽然用 Maven 可以很容易实现这一点(因为它强制您采用其项目布局),但对于 Ant 开发人员来说,就需要某种形式的规范了。对于 Ant,有两个建议: 使用命名惯例(“compile”用于编译项目,“dist”用于创建发布版本) 使用由 Ant 1.6 提供的新的 任务:创建一个将在每一个子项目中导入的通用 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.apache.org/ 上下载。安装非常简单,并且在http://maven.apache.org/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 中。正如插件的文档中所说明的那样,需要设置一些属性: 在您的主目录中创建“build.properties”文件。 设置文档所需的属性。
例如,下面是我自己的 build.properties 的屏幕截图:

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

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

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

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

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

第 4 步(共 4 步):选择该快捷方式何时将可用
您现在即可从 Oracle JDeveloper 内部运行 Maven 了,如以下屏幕截图所示:

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

总结
创建新的 J2EE 项目是一次非常丰富的体验。需要掌握整个构建周期(从管理源代码文件到部署打包的应用程序)。幸运地是,有一套丰富的工具可以帮助项目经理取得成功。
Maven 是一个强大的构建工具,可以与 Oracle JDeveloper 很好地集成。它的设置相当简单,并且得益于它预先配置的插件,Maven 将提供比同等解决方案(如 Ant)更大的时间收益。对于经验较少的开发人员和团队主管,Maven 的额外好处是鼓励他们遵循大量的最佳实践。最后一点但相当重要,使用 Maven 保证了全面的项目文档持续可用性,这正是众多企业项目所缺乏的。
构建后续步骤:
1)下载 Maven
2)下载 Oracle JDeveloper 10g 的 Maven 插件
3)技术说明:使用 Oracle JDeveloper 10g 和 Maven 插件开发项目
跟着作者一起使用 Maven JDeveloper 插件创建一个 Java 应用程序项目,并随后将该项目导入 JDeveloper IDE 中。
有关构建软件项目的其他信息:
阅读有关在 JDeveloper 中集成 Ant 的更多资料
在 Oracle JDeveloper 中集成 Ant 的方法是,向 JDeveloper 项目添加一个 Ant 构建文件,或者从一个现有的 JDeveloper 项目生成一个新的 Ant 构建文件。
试用:使用 Ant 进行构建
这个 viewlet 演示了已拥有 Ant 项目的用户如何能够在 JDeveloper 内部使用这些项目。
为任务编写者提供的 Ant 1.6
作者:Stefan Bodewig
利用 Ant 1.6 内部的变化编写任务或者甚至任务库。
为大型项目提供的新的 Ant 1.6 新特性
作者:Stefan Bodewig
了解 Ant 1.6 的新特性,并了解它们将如何影响您构建编译过程的方式。
将 CVS、PuTTY、SCM、SourceForge.net 与 Oracle JDeveloper 结合使用(请参见软件配置管理部分)
Julien Dubois 是一位 J2EE 专家,住在法国的巴黎。您可以在http://www.julien-dubois.com 上遇到他。
_xyz