|
掌握并精通 作為項(xiàng)目經(jīng)理,選擇項(xiàng)目管理工具和慣例是您要做的最重要決策
從頭開始一個(gè)新的 J2EE 項(xiàng)目既充滿刺激又富有挑戰(zhàn)。您在項(xiàng)目之初所做的決策將對(duì)整個(gè)項(xiàng)目過(guò)程產(chǎn)生巨大影響。因此,良好的項(xiàng)目管理習(xí)慣通常從一開始就可確保項(xiàng)目的成功。 如果您在管理 J2EE 項(xiàng)目,那么您至少要堅(jiān)定、明確地回答六個(gè)關(guān)鍵的項(xiàng)目管理問(wèn)題:
在本文中,我將指出您(作為項(xiàng)目主管)為了回答這些問(wèn)題并使項(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)建過(guò)程是任何 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)建工具。它是一種非常靈活的工具;不過(guò),這種靈活性付出了代價(jià)的。許多企業(yè)項(xiàng)目深受龐大的 Ant 腳本之苦,在構(gòu)建者離開團(tuán)隊(duì)之后很難管理這些腳本。 為了幫助您在這些工具之間做出選擇,下面提供了一些高級(jí)比較:
如果您明白自己的目標(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)為您提供幫助。 通過(guò)學(xué)習(xí)本文和使用 Maven,您將接觸到一套很好的工具、很好的軟件過(guò)程和很好的項(xiàng)目布局。不過(guò),如果您希望轉(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。
因?yàn)楸疚膶W⒂谄髽I(yè)項(xiàng)目,因此您可能想創(chuàng)建您自己的 Maven 信息庫(kù)。我強(qiáng)烈推薦使用 Maven 代理,它將透過(guò)您的企業(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)見(jiàn) http://maven./reference/project-descriptor.html。 因?yàn)?POM 是一個(gè) XML 文件,所以您可以用 Oracle JDeveloper 對(duì)其進(jìn)行編輯。不過(guò),我們稍后將使用的 Maven JDeveloper 插件將從當(dāng)前項(xiàng)目中刪除 project.xml 文件 — 這不是多大的問(wèn)題,因?yàn)槟梢钥焖俚貙⑵渲匦聦?dǎo)入。 從項(xiàng)目中獲得反饋 管理 J2EE 項(xiàng)目時(shí)另一個(gè)重要考量就是,您需要了解項(xiàng)目的狀態(tài)。但是,您沒(méi)有時(shí)間去驗(yàn)證您的團(tuán)隊(duì)所開發(fā)或簽入的每個(gè)文件。 解決方法是與您的團(tuán)隊(duì)進(jìn)行溝通和使用適當(dāng)?shù)膱?bào)告工具。 當(dāng)然,首要的還是經(jīng)常與開發(fā)人員溝通。不過(guò),反饋不一定總要面對(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)建和部署周期”過(guò)程。當(dāng)正確使用時(shí),構(gòu)建工具(如 Maven 或 Ant)將構(gòu)建過(guò)程轉(zhuǎn)換成在開發(fā)人員的 IDE 中的一次單擊。這些工具還可以自動(dòng)將項(xiàng)目部署到您選擇的應(yīng)用服務(wù)器上。 該解決方案有一個(gè)附加的好處:它不僅使開發(fā)人員的任務(wù)變得更輕松,而且一旦定義了一個(gè)簡(jiǎn)潔的過(guò)程來(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)說(shuō),就需要某種形式的規(guī)范了。對(duì)于 Ant,有兩個(gè)建議:
另一個(gè)更復(fù)雜的問(wèn)題是需要以給定的順序來(lái)構(gòu)建這些項(xiàng)目,并且一個(gè)項(xiàng)目的失敗將觸發(fā)其附屬的子項(xiàng)目的失敗。讓我們舉個(gè)例子,其中您將使用:
在這種情況下,myutility.jar 的構(gòu)建過(guò)程中的失敗將觸發(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 — 用于提交給客戶端。 如果您按照以前的問(wèn)題的解決方案來(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)建過(guò)程中獲得快樂(lè)! 管理代碼教程 現(xiàn)在,我們開始使用 Maven 并創(chuàng)建一個(gè)可供使用的基于 Strut 的項(xiàng)目。 啟動(dòng)項(xiàng)目 Maven 可以從 http://maven./ 上下載。安裝非常簡(jiǎn)單,并且在 http://maven./start/install.html 上提供了全面的文檔。
Maven 自帶大量的插件,這些插件將自動(dòng)通過(guò)互聯(lián)網(wǎng)進(jìn)行安裝。(請(qǐng)參見(jiàn)“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 中。正如插件的文檔中所說(shuō)明的那樣,需要設(shè)置一些屬性:
|
|
|
來(lái)自: ekylin > 《軟件技術(shù)》