掌握并精通
作者:Julien Dubois
作為項(xiàng)目經(jīng)理,選擇項(xiàng)目管理工具和慣例是您要做的最重要決策
![]() |
從頭開始一個(gè)新的 J2EE 項(xiàng)目既充滿刺激又富有挑戰(zhàn)。您在項(xiàng)目之初所做的決策將對(duì)整個(gè)項(xiàng)目過程產(chǎn)生巨大影響。因此,良好的項(xiàng)目管理習(xí)慣通常從一開始就可確保項(xiàng)目的成功。
如果您在管理 J2EE 項(xiàng)目,那么您至少要堅(jiān)定、明確地回答六個(gè)關(guān)鍵的項(xiàng)目管理問題:
在本文中,我將指出您(作為項(xiàng)目主管)為了回答這些問題并使項(xiàng)目成功可以采取的一些措施(使用 Oracle JDeveloper 支持的開放源代碼項(xiàng)目管理工具)。我還將提供一個(gè)簡(jiǎn)短的教程,以使您能夠使用 Maven 來(lái)開始項(xiàng)目和代碼管理,以創(chuàng)建一個(gè)可供使用的基于 Strut 的項(xiàng)目。
在一篇文章中面面俱到地介紹所有這些主題非常困難,但我希望能夠足夠詳細(xì)地介紹一些較重要的主題來(lái)幫助您入門。
做出選擇
構(gòu)建過程是任何 J2EE 項(xiàng)目的關(guān)鍵部分,有許多構(gòu)建工具可供選擇。 對(duì)本文而言,我們的討論將圍繞最流行的兩種 J2EE 構(gòu)建工具:Maven 和 Ant。
Maven 和 Ant 是由 Apache Software Foundation 提供的開放源代碼項(xiàng)目,在它們之間進(jìn)行選擇是項(xiàng)目主管要做的最重要的決策之一。Maven 旨在幫助開發(fā)人員以一致的方式輕松構(gòu)建、測(cè)試 Java 項(xiàng)目以及為 Java 項(xiàng)目編制文檔。它是一種強(qiáng)大的工具,有助于在整個(gè)項(xiàng)目周期內(nèi)對(duì)項(xiàng)目進(jìn)行管理。
Ant 是 Java 領(lǐng)域最流行的構(gòu)建工具。它是一種非常靈活的工具;不過,這種靈活性付出了代價(jià)的。許多企業(yè)項(xiàng)目深受龐大的 Ant 腳本之苦,在構(gòu)建者離開團(tuán)隊(duì)之后很難管理這些腳本。
為了幫助您在這些工具之間做出選擇,下面提供了一些高級(jí)比較:
Ant | Maven | |
安裝 | 非常容易 | 非常容易(與 Ant 非常相似) |
啟動(dòng)新項(xiàng)目的時(shí)間 | 5 分鐘 | 15 分鐘 |
添加新功能的時(shí)間 | 添加一個(gè)新目標(biāo)需 10 分鐘 | 使用一個(gè)新目標(biāo)需 2 分鐘 |
新開發(fā)人員學(xué)習(xí)所需的時(shí)間 | 30 分鐘。非常易于理解,非常好的工具支持。 | 2 小時(shí)。開始時(shí)可能讓人困惑。 |
標(biāo)準(zhǔn)布局 | 無(wú)(好處是您有很大的靈活性)。 | 有(好處是所有項(xiàng)目具有相同的外觀)。 |
多項(xiàng)目支持 | 有,但您必須創(chuàng)建自己的主構(gòu)建文件。 | 有,由 Maven Reactor 實(shí)現(xiàn) |
文檔生成 | 執(zhí)行這一操作沒有標(biāo)準(zhǔn)方法,但有大量工具可供使用。 | 有 |
IDE 集成 | 是 | 非?;A(chǔ) |
如果您明白自己的目標(biāo)并想絕對(duì)控制構(gòu)建機(jī)制,那我建議您選擇 Ant。但是,如果您不確定您的項(xiàng)目結(jié)構(gòu)并在構(gòu)建系統(tǒng)方面經(jīng)驗(yàn)不足,那就選擇 Maven。Maven 將為您提供良好的項(xiàng)目布局以及優(yōu)秀的工具,在整個(gè)項(xiàng)目周期內(nèi)為您提供幫助。
通過學(xué)習(xí)本文和使用 Maven,您將接觸到一套很好的工具、很好的軟件過程和很好的項(xiàng)目布局。不過,如果您希望轉(zhuǎn)至 Ant,那么將您使用的 Maven 目標(biāo)重寫為 Ant 目標(biāo)將非常容易。對(duì)于簡(jiǎn)單的構(gòu)建,從 Maven 轉(zhuǎn)換為 Ant 只需幾個(gè)小時(shí),因此可以放心大膽地在項(xiàng)目的后續(xù)階段中繼續(xù)使用 Maven。
團(tuán)隊(duì)協(xié)作
我們?yōu)榭蛻舳颂峁┑闹饕钱a(chǎn)品品質(zhì)的代碼。為了達(dá)到這個(gè)目標(biāo),整個(gè)團(tuán)隊(duì)一起協(xié)作至關(guān)重要,并且有大量的源代碼配置管理 (SCM) 工具可用來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。
例如,開放源代碼的并發(fā)版本控制系統(tǒng) (CVS) 可能是最流行的 SCM 軟件。它默認(rèn)安裝在許多 Unix/Linux 系統(tǒng)上,并且有一個(gè)非常好的 Windows 版本,名為 CVSNT。
“在 IDE 和 SCM 工具之間切換容易出錯(cuò)且費(fèi)時(shí)?!?/span> |
因?yàn)楸疚膶W⒂谄髽I(yè)項(xiàng)目,因此您可能想創(chuàng)建您自己的 Maven 信息庫(kù)。我強(qiáng)烈推薦使用 Maven 代理,它將透過您的企業(yè)防火墻連接到互聯(lián)網(wǎng)上的全球 Maven 信息庫(kù)。當(dāng)您創(chuàng)建了您自己的企業(yè)信息庫(kù)時(shí),您可以輕松地在其中存儲(chǔ)自己的 JAR 文件。(目錄布局很清楚,它只是模擬了 Maven Proxy 創(chuàng)建的結(jié)構(gòu)而已。)
Maven 還提供了一個(gè)稱為 StatCVS 的插件,它生成項(xiàng)目的 CVS 信息庫(kù)的一個(gè)完整報(bào)表,其中包括許多顯示開發(fā)人員活動(dòng)的圖形。
Maven 項(xiàng)目對(duì)象模型 (POM) Maven 使用項(xiàng)目對(duì)象模型 (POM) 來(lái)存儲(chǔ)項(xiàng)目的信息。該信息包括項(xiàng)目的名稱、描述、開發(fā)人員、SCM 系統(tǒng)等。POM 是一個(gè)簡(jiǎn)單的 XML 文件,其詳細(xì)信息請(qǐng)見 http://maven.apache.org/reference/project-descriptor.html。
因?yàn)?POM 是一個(gè) XML 文件,所以您可以用 Oracle JDeveloper 對(duì)其進(jìn)行編輯。不過,我們稍后將使用的 Maven JDeveloper 插件將從當(dāng)前項(xiàng)目中刪除 project.xml 文件 — 這不是多大的問題,因?yàn)槟梢钥焖俚貙⑵渲匦聦?dǎo)入。
從項(xiàng)目中獲得反饋
管理 J2EE 項(xiàng)目時(shí)另一個(gè)重要考量就是,您需要了解項(xiàng)目的狀態(tài)。但是,您沒有時(shí)間去驗(yàn)證您的團(tuán)隊(duì)所開發(fā)或簽入的每個(gè)文件。
解決方法是與您的團(tuán)隊(duì)進(jìn)行溝通和使用適當(dāng)?shù)膱?bào)告工具。
當(dāng)然,首要的還是經(jīng)常與開發(fā)人員溝通。不過,反饋不一定總要面對(duì)面地進(jìn)行。有大量自動(dòng)報(bào)告工具可供使用,如 CruiseControl、JUnit、Checkstyle 或 StatCVS,這些工具能夠使您了解項(xiàng)目的當(dāng)前狀態(tài)。就本文而言,討論持續(xù)集成和 CruiseControl 的價(jià)值將非常有幫助。
結(jié)合使用 CruiseControl 和 Maven持續(xù)集成是 Martin Fowler 首先采用的一種最佳實(shí)踐,它可以歸納為“定期自動(dòng)構(gòu)建和測(cè)試項(xiàng)目是一個(gè)不錯(cuò)的主意”。這個(gè)概念已被全球的公司所認(rèn)可。
持續(xù)集成在幾個(gè)人在同一項(xiàng)目上一起工作時(shí)特別有用,因?yàn)樗麄儗⒍ㄆ诘玫阶钚碌捻?xiàng)目狀態(tài)并將收到來(lái)自 CruiseControl 以電子郵件發(fā)送的錯(cuò)誤通知。
CruiseControl 是最受歡迎的持續(xù)集成工具,我衷心推薦它。CruiseControl 完全能夠處理 Maven 管理的項(xiàng)目。Maven 還為配置 CruiseControl 提供了一個(gè)插件。該插件可以輕松地創(chuàng)建 CruiseControl 配置文件,并且還可以用來(lái)管理 CruiseControl 的運(yùn)行。
另一個(gè)有用的 Maven 插件 Checkstyle 將幫助您的項(xiàng)目遵循編碼標(biāo)準(zhǔn)。可以將 Checkstyle 報(bào)告包含在 CruiseControl 中,以使任何提交非標(biāo)準(zhǔn)代碼的人都將中斷構(gòu)建。要將這些報(bào)告添加到您的項(xiàng)目文檔中,只需將它們添加到您的 project.xml 文件的 <reports/> 部分中。
管理一次單擊構(gòu)建/部署周期
構(gòu)建和部署應(yīng)用程序可能花費(fèi)幾個(gè)小時(shí),并且可能需要幾個(gè)手動(dòng)步驟。開發(fā)人員厭煩了漫長(zhǎng)的構(gòu)建周期時(shí)間和手動(dòng)干預(yù)。一天要用幾個(gè)小時(shí)來(lái)等待應(yīng)用程序進(jìn)行構(gòu)建和部署。這些延遲帶來(lái)的失落感無(wú)以言表。
解決辦法是建立一個(gè)“一次單擊構(gòu)建和部署周期”過程。當(dāng)正確使用時(shí),構(gòu)建工具(如 Maven 或 Ant)將構(gòu)建過程轉(zhuǎn)換成在開發(fā)人員的 IDE 中的一次單擊。這些工具還可以自動(dòng)將項(xiàng)目部署到您選擇的應(yīng)用服務(wù)器上。
該解決方案有一個(gè)附加的好處:它不僅使開發(fā)人員的任務(wù)變得更輕松,而且一旦定義了一個(gè)簡(jiǎn)潔的過程來(lái)打包應(yīng)用程序,提交給客戶端的軟件就將有更高的質(zhì)量(不再有遺忘的文件或未編譯的 JSP)。
就本文而言,您的一次單擊部署周期還將生成相應(yīng)的項(xiàng)目文檔,這將非常有幫助。Maven 以其生成的項(xiàng)目文檔而著稱。只需使用 maven site:generate 目標(biāo)即可創(chuàng)建當(dāng)前項(xiàng)目的文檔。生成的 web 站點(diǎn)看起來(lái)有點(diǎn)類似下面顯示的屏幕截圖:
![]() |
開發(fā)多個(gè)項(xiàng)目
隨著項(xiàng)目復(fù)雜度的增加,很有可能將項(xiàng)目分成幾個(gè)較小的項(xiàng)目。結(jié)果是:項(xiàng)目管理時(shí)間成倍增加。每個(gè)小項(xiàng)目都需要管理。
解決方案是對(duì)不同項(xiàng)目使用一致的構(gòu)建機(jī)制,并創(chuàng)建一個(gè)“主項(xiàng)目”來(lái)包含這些較小的項(xiàng)目。雖然用 Maven 可以很容易實(shí)現(xiàn)這一點(diǎn)(因?yàn)樗鼜?qiáng)制您采用其項(xiàng)目布局),但對(duì)于 Ant 開發(fā)人員來(lái)說,就需要某種形式的規(guī)范了。對(duì)于 Ant,有兩個(gè)建議:
另一個(gè)更復(fù)雜的問題是需要以給定的順序來(lái)構(gòu)建這些項(xiàng)目,并且一個(gè)項(xiàng)目的失敗將觸發(fā)其附屬的子項(xiàng)目的失敗。讓我們舉個(gè)例子,其中您將使用:
在這種情況下,myutility.jar 的構(gòu)建過程中的失敗將觸發(fā)所有項(xiàng)目的失敗。而 myweb.war 的失敗將只觸發(fā)最后的 myear.ear 的失敗。
管理這種項(xiàng)目相依性可以用手動(dòng)方式(如果只有少數(shù)幾個(gè)項(xiàng)目)也可以用自動(dòng)方式(使用 Maven Reactor)。
打包 J2EE 項(xiàng)目
在許多 J2EE 項(xiàng)目中需要?jiǎng)?chuàng)建存檔文件 — 如 WAR、JAR 或 EAR — 用于提交給客戶端。
如果您按照以前的問題的解決方案來(lái)進(jìn)行操作,那么您將遇到兩個(gè)相當(dāng)迥異的挑戰(zhàn):
這是 IDE(如 Oracle JDeveloper)能夠派上用場(chǎng)的地方。然而,如果您不希望依賴于 IDE,那么可以從 Ant 和 Maven 內(nèi)部運(yùn)行 XDoclet(一個(gè)代碼生成工具)來(lái)生成前面提到的部署描述符。
我現(xiàn)在為您提供一個(gè)簡(jiǎn)短的教程來(lái)使您能夠開始使用 Maven 和 Oracle JDeveloper。在構(gòu)建過程中獲得快樂!
管理代碼教程
現(xiàn)在,我們開始使用 Maven 并創(chuàng)建一個(gè)可供使用的基于 Strut 的項(xiàng)目。
啟動(dòng)項(xiàng)目
Maven 可以從 http://maven.apache.org/ 上下載。安裝非常簡(jiǎn)單,并且在 http://maven.apache.org/start/install.html 上提供了全面的文檔。
![]() |
Maven 自帶大量的插件,這些插件將自動(dòng)通過互聯(lián)網(wǎng)進(jìn)行安裝。(請(qǐng)參見“Maven 項(xiàng)目信息庫(kù)”部分。)
Maven genapp 插件
Maven genapp 插件將幫助快速啟動(dòng)基于 Struts 的應(yīng)用程序。運(yùn)行 maven genapp 并使用“struts”項(xiàng)目模板,如以下屏幕截圖所示:
![]() |
您現(xiàn)在就擁有了一個(gè)能夠?qū)嶋H應(yīng)用的基于 Struts 的 web 應(yīng)用程序。要?jiǎng)?chuàng)建項(xiàng)目的 WAR 文件,只需輸入“maven war”。該項(xiàng)目有一個(gè)簡(jiǎn)單的 POM (project.xml) 文件,您可以根據(jù)需要來(lái)編輯它。
Maven JDeveloper 插件使用 Maven JDeveloper 插件將項(xiàng)目導(dǎo)入 Oracle JDeveloper 中。正如插件的文檔中所說明的那樣,需要設(shè)置一些屬性:
例如,下面是我自己的 build.properties 的屏幕截圖:
![]() |
您可以任意多次地運(yùn)行“maven jdeveloper”目標(biāo);它將從 Maven 的 project.xml 文件中更新您的 Oracle JDeveloper 配置。
例如,它將自動(dòng)配置 JDeveloper 的庫(kù)。
![]() |
在 JDeveloper 內(nèi)部運(yùn)行 Maven從 Oracle JDeveloper 內(nèi)部運(yùn)行 Maven 以使運(yùn)行 Maven 不需要啟動(dòng)新的控制臺(tái)窗口,這可能非常有用。下面的屏幕截圖說明了 Oracle JDeveloper 中的一個(gè)新按鈕的“maven dist”目標(biāo)的配置。您將通過選擇 Tools 菜單的 External Tools 然后選擇 Add 來(lái)開始這個(gè)過程。
![]() |
第 1 步(共 4 步):選擇 Maven 可執(zhí)行文件(選擇“dist”目標(biāo)) |
![]() |
第 2 步(共 4 步):選擇如何顯示 Maven 快捷方式 |
![]() |
第 3 步(共 4 步):指定該快捷方式將出現(xiàn)在 JDeveloper 中的位置 |
![]() |
第 4 步(共 4 步):選擇該快捷方式何時(shí)將可用 |
您現(xiàn)在即可從 Oracle JDeveloper 內(nèi)部運(yùn)行 Maven 了,如以下屏幕截圖所示:
![]() |
Maven 控制臺(tái)如果您對(duì)使用控制臺(tái)的偏愛僅次于 Oracle JDeveloper,那么我強(qiáng)烈推薦您使用 Maven 控制臺(tái)插件。它將一次性啟動(dòng) Maven,并將等待指令。結(jié)果,運(yùn)行目標(biāo)要快得多(與 Ant 相比)了。
![]() |
總結(jié)
創(chuàng)建新的 J2EE 項(xiàng)目是一次非常豐富的體驗(yàn)。需要掌握整個(gè)構(gòu)建周期(從管理源代碼文件到部署打包的應(yīng)用程序)。幸運(yùn)地是,有一套豐富的工具可以幫助項(xiàng)目經(jīng)理取得成功。
Maven 是一個(gè)強(qiáng)大的構(gòu)建工具,可以與 Oracle JDeveloper 很好地集成。它的設(shè)置相當(dāng)簡(jiǎn)單,并且得益于它預(yù)先配置的插件,Maven 將提供比同等解決方案(如 Ant)更大的時(shí)間收益。對(duì)于經(jīng)驗(yàn)較少的開發(fā)人員和團(tuán)隊(duì)主管,Maven 的額外好處是鼓勵(lì)他們遵循大量的最佳實(shí)踐。最后一點(diǎn)但相當(dāng)重要,使用 Maven 保證了全面的項(xiàng)目文檔持續(xù)可用性,這正是眾多企業(yè)項(xiàng)目所缺乏的。
聯(lián)系客服