《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > Java程序開(kāi)發(fā)過(guò)程中的CVS控制

Java程序開(kāi)發(fā)過(guò)程中的CVS控制

2009-01-08
作者:王京武,劉東波,李由

1 引言?

??? 當(dāng)前的信息系統(tǒng)開(kāi)發(fā)過(guò)程存在著以下兩個(gè)急需解決的問(wèn)題。第一,開(kāi)發(fā)過(guò)程中代碼的持續(xù)集成問(wèn)題。過(guò)去的系統(tǒng)集成,開(kāi)發(fā)人員必須跑遍整個(gè)開(kāi)發(fā)中心,詢問(wèn)每一個(gè)程序員有沒(méi)有新的代碼,然后把這些新代碼拷貝過(guò)來(lái),再找到合適的插入位置,這樣集成方式效率低下,錯(cuò)誤率極高。第二,版本控制問(wèn)題。由團(tuán)隊(duì)進(jìn)行開(kāi)發(fā)的項(xiàng)目,尤其是開(kāi)源的項(xiàng)目,版本的控制是復(fù)雜的。開(kāi)發(fā)人員對(duì)于版本定義的不一致,以及先前版本的內(nèi)容不完整甚至是丟失都是危險(xiǎn)的。對(duì)于上述問(wèn)題最簡(jiǎn)單的解決方案就是:使用一套具有網(wǎng)絡(luò)功能并且?guī)в凶岄_(kāi)發(fā)者輕松獲取源代碼的配置管理系統(tǒng)作為所有代碼的來(lái)源,然后再使用一套版本管理工具,以做到安全正確地記錄和使用各個(gè)時(shí)期各個(gè)版本中的文件。?

??? CVS是一套出色的開(kāi)放源代碼的集配置管理與版本控制一體的工具,管理所有的源文件以及軟件的版本信息。這里的源文件不僅僅是代碼源文件,還包括創(chuàng)建的腳本文件、屬性文件、庫(kù)文件等。?

??? 正確地在系統(tǒng)開(kāi)發(fā)過(guò)程中,尤其是在企業(yè)級(jí)開(kāi)發(fā)或開(kāi)源開(kāi)發(fā)過(guò)程中使用CVS控制工具,體現(xiàn)了軟件配置管理與版本控制相結(jié)合的思想,這也是開(kāi)發(fā)人員和團(tuán)隊(duì)所必須具備的技能。?

2 CVS的概念?

??? CVS(Concurrent Versions System)是目前業(yè)界使用比較廣泛,思想比較先進(jìn),控制比較簡(jiǎn)單的配置管理與版本控制一體的工具。CVS是基于Unix體系中成熟的SCCS(Source Code Control System)和RCS(Revision Control System)開(kāi)發(fā)而成的一個(gè)開(kāi)放源碼的項(xiàng)目,已經(jīng)支持在Windows操作系統(tǒng)上的應(yīng)用。由于開(kāi)放源碼項(xiàng)目的開(kāi)發(fā)者分布很廣泛,對(duì)于源文件和版本信息的管理難度很大,需要一個(gè)結(jié)構(gòu)簡(jiǎn)單、功能強(qiáng)大、能夠跨平臺(tái)的工具進(jìn)行控制,所以開(kāi)放源碼項(xiàng)目配置管理與版本控制已經(jīng)成為目前CVS的一個(gè)典型應(yīng)用。

2.1 CVS的結(jié)構(gòu)?

??? CVS的基本工作思路就是在一臺(tái)服務(wù)器上建立一個(gè)倉(cāng)庫(kù),倉(cāng)庫(kù)里可以存放許多不同項(xiàng)目的源程序,由倉(cāng)庫(kù)管理員統(tǒng)一管理這些源程序。這樣就好象只有一個(gè)人在修改文件一樣避免了沖突。每個(gè)用戶在使用倉(cāng)庫(kù)之前,首先要把倉(cāng)庫(kù)里的項(xiàng)目文件下載到本地。用戶做的任何修改都是在本地進(jìn)行的,然后用CVS 命令進(jìn)行提交,再由 CVS 倉(cāng)庫(kù)管理員統(tǒng)一修改。這樣就可以做到跟蹤文件的變化,控制代碼的沖突?;谝陨系墓ぷ魉悸稢VS采用客戶機(jī)/服務(wù)器的結(jié)構(gòu),軟件的源文件以及各種版本信息存儲(chǔ)在作為倉(cāng)庫(kù)的中心服務(wù)器內(nèi),開(kāi)發(fā)者可以隨時(shí)通過(guò)CVS的客戶端工具將本地源文件的副本與中心服務(wù)器倉(cāng)庫(kù)中的源文件保持一致。CVS的結(jié)構(gòu)如圖一所示。?

圖一:CVS結(jié)構(gòu)圖

2.2  CVS的重要術(shù)語(yǔ)?

2.2.1 Module(模塊)相互關(guān)聯(lián)的一組文件的集合,一般一個(gè)Module會(huì)和一個(gè)工程相對(duì)應(yīng)。2.2.2 Respository(倉(cāng)庫(kù)):存放Module的倉(cāng)庫(kù),可以在開(kāi)發(fā)人員的本地也可以在遠(yuǎn)程CVS服務(wù)器上。

2.2.3 Branch(分枝):Branch是倉(cāng)庫(kù)中獨(dú)立派生的一個(gè)分離的開(kāi)發(fā)版本,用于管理源文件的修改。其中HEAD作為一個(gè)特殊的Branch代表主干版本。HEAD可以分離出不同的Branch,而每個(gè)Branch中的變更又可以很容易地與HEAD進(jìn)行合并。這種Branch模型通過(guò)支持源文件的并發(fā)修改,保證了不同開(kāi)發(fā)者的相對(duì)獨(dú)立,但又高度集成。

2.2.4 Merge(合并):在CVS版本控制過(guò)程中,Merge作為一個(gè)核心的工作,將派生的Branch版本與HEAD的最新版本之間的變更合并到開(kāi)發(fā)人員的工作目錄之中。CVS提供的Merge命令使開(kāi)發(fā)人員在使用源文件時(shí)不會(huì)鎖定該文件,即同一個(gè)CVS管理的源文件可以被多個(gè)開(kāi)發(fā)人員同時(shí)進(jìn)行修改。

圖二:Java開(kāi)發(fā)過(guò)程中CVS控制的示意圖

2.3  CVS的工作流程?

??? CVS的工作流程包括以下三個(gè)步驟。

??? 第一,預(yù)處理。通過(guò)更新操作保證所有本地源文件與最新的Branch中的源文件一致性。

??? 第二,代碼開(kāi)發(fā)。在本地進(jìn)行軟件代碼的開(kāi)發(fā),并在本地保存代碼的修改。

??? 第三,同步。當(dāng)做好提交工作的準(zhǔn)備后,進(jìn)行與服務(wù)器的同步操作。Incoming和Outgoing是CVS工作時(shí)的兩種狀態(tài)模式,在進(jìn)行Update操作時(shí)(從服務(wù)器得到其他人的修改),CVS進(jìn)入Incoming狀態(tài);在進(jìn)行Commit操作時(shí)(把本地修改提交給CVS服務(wù)器),CVS進(jìn)入Outgoing狀態(tài)。在同步階段中,開(kāi)發(fā)人員首先通過(guò)Update操作檢查本地修改是否會(huì)造成與服務(wù)器端源文件的沖突和對(duì)完整性的破壞,最后向服務(wù)器Commit本地的修改。CVS版本控制的基本流程如圖三所示:

3 Java程序開(kāi)發(fā)過(guò)程中的CVS控制?

??? Java語(yǔ)言具有語(yǔ)法簡(jiǎn)單、安全、支持多線程、具有跨平臺(tái)性以及純面向?qū)ο蟮忍攸c(diǎn)。為了廣泛適應(yīng)各種類(lèi)型的應(yīng)用模式,先后出現(xiàn)了J2SE、J2ME以及J2EE等組件技術(shù)。

??? 現(xiàn)在CVS版本控制器對(duì)于Java提供了無(wú)縫的支持。眾多Java開(kāi)發(fā)工具都將CVS功能內(nèi)嵌到自身中,作為其版本控制的基本依托。主要支持CVS的開(kāi)發(fā)工具有Borland公司的JBuilder和Eclipse組織提供的開(kāi)源工具Eclipse。其中,JBuilder代表了當(dāng)前主流的商用Java開(kāi)發(fā)工具,Eclipse則代表了典型的開(kāi)源Java開(kāi)發(fā)工具。二者在最新的版本中都已經(jīng)利用自身嵌入的CVS控制器實(shí)現(xiàn)了在本地或遠(yuǎn)程CVS服務(wù)器上的軟件版本控制,從而將先進(jìn)的版本控制思想引入到Java世界中。此外,對(duì)于其它尚未嵌入CVS的Java開(kāi)發(fā)工具,開(kāi)發(fā)人員還可以下載得到獨(dú)立的CVS管理器。比較常用的CVS管理器有WinCVS。三種不同的CVS管理器各有特點(diǎn),下面分別介紹。

3.1 JBuilder中的CVS控制?

??? JBuilder是Borland公司的Java程序開(kāi)發(fā)的主要工具,更是J2EE組件技術(shù)開(kāi)發(fā)中的重要商業(yè)工具。JBuilder的標(biāo)準(zhǔn)版和企業(yè)版中集成了CVS版本控制系統(tǒng)功能,在JBuilder的應(yīng)用瀏覽器中使用CVS的接口可以方便地訪問(wèn)到CVS提供的大部分命令,從而直接訪問(wèn)、使用和控制本地或遠(yuǎn)程的CVS系統(tǒng)。

??? JBuilder中使用CVS的主要過(guò)程如下:第一,創(chuàng)建CVS倉(cāng)庫(kù)(Respository)。該倉(cāng)庫(kù)可以位于本地或遠(yuǎn)程服務(wù)器;第二,創(chuàng)建CVS 模塊(Module)。開(kāi)發(fā)人員在指定的倉(cāng)庫(kù)中創(chuàng)建模塊,一旦工程以模塊的形成存在,那么工程的內(nèi)容就都在CVS的控制之下了;第三,將JBuilder開(kāi)發(fā)的源文件添加到CVS倉(cāng)庫(kù)中;第四,從CVS倉(cāng)庫(kù)中檢出(check out)模塊內(nèi)容存放到本地工程中;第五,在檢出的本地工程中修改或刪除源文件;第六,解決與服務(wù)器倉(cāng)庫(kù)中的代碼沖突,最終將本地源文件的更新內(nèi)容提交到CVS倉(cāng)庫(kù)中。

3.2 Eclipse中的CVS?

??? Eclipse是開(kāi)源組織的Java開(kāi)發(fā)工具,可以方便高效地開(kāi)發(fā)J2SE和J2EE等組件技術(shù)下的信息系統(tǒng)或插件。Eclipse本身內(nèi)置了CVS命令,不需要使用其他客戶端軟件,可以直接訪問(wèn)、使用和控制CVS的服務(wù)器。

??? 作為開(kāi)源項(xiàng)目主要使用的開(kāi)發(fā)工具, Eclipse與以JBuilder為代表的商業(yè)開(kāi)發(fā)工具在CVS使用上模式上有很大差別,即Eclipse沒(méi)有在本地創(chuàng)建CVS服務(wù)進(jìn)行控制管理的功能。其原因在于使用Eclipse開(kāi)發(fā)的開(kāi)源項(xiàng)目,項(xiàng)目中的源文件需要高度地集中管理。開(kāi)發(fā)者需要將本地的源文件提交到遠(yuǎn)程服務(wù)器上,由開(kāi)源組織統(tǒng)一進(jìn)行控制。而JBuilder作為商用工具考慮到應(yīng)用開(kāi)發(fā)者面對(duì)的信息系統(tǒng)的類(lèi)型很廣泛,對(duì)于開(kāi)發(fā)規(guī)模較小的應(yīng)用,源文件的控制不需要放置在CVS的遠(yuǎn)程服務(wù)器上,可以通過(guò)在本地創(chuàng)建CVS服務(wù)的方式進(jìn)行獨(dú)立控制。

3.3 通過(guò)WinCVS控制Java程序?

??? WinCVS是Windows操作系統(tǒng)下的一種CVS客戶端控制軟件,是目前對(duì)于CVS控制最為完善與靈活的軟件,其使用方法相對(duì)比較復(fù)雜。WinCVS獨(dú)立于任何開(kāi)發(fā)工具,因此可以控制多種開(kāi)發(fā)語(yǔ)言的源文件(如:Java、C/C++、Pascal)。例如,對(duì)于使用其他Java開(kāi)發(fā)工具(如:Jdesigner、TextPad等等)甚至是寫(xiě)字板開(kāi)發(fā)的Java程序源文件,WinCVS都能夠進(jìn)行控制管理。

??? 使用WinCVS的過(guò)程如下:第一,配置客戶端與服務(wù)器的參數(shù);第二,CVS管理人員將源文件導(dǎo)入到服務(wù)器的模塊中;第三,CVS管理人員創(chuàng)建標(biāo)簽、分支;第四,開(kāi)發(fā)人員登錄遠(yuǎn)程CVS服務(wù)器;第五,開(kāi)發(fā)人員從服務(wù)器倉(cāng)庫(kù)中檢出(checkout)模塊到本地工程(如圖四所示);第六,開(kāi)發(fā)人員將本地工程修改過(guò)的文件提交到服務(wù)器的倉(cāng)庫(kù)中;第七,開(kāi)發(fā)人員在每次對(duì)本地的文件修改前,將服務(wù)器端倉(cāng)庫(kù)中存放的文件更新到本地工程中,以保證在多人操作同一個(gè)文件時(shí)不會(huì)引起沖突;第八,開(kāi)發(fā)人員將本地工程中的修改結(jié)果提交到服務(wù)器倉(cāng)庫(kù)中;第九,CVS的管理人員合并不同分支(版本)的文件。在整個(gè)過(guò)程中,管理人員和開(kāi)發(fā)人員可以隨時(shí)察看查看文件的當(dāng)前狀態(tài)和歷史信息。

????????????

圖四:Checkout操作

4 結(jié)束語(yǔ)?

??? 利用CVS工具結(jié)合配置管理和版本控制的先進(jìn)思想管理Java程序開(kāi)發(fā)全過(guò)程,其目的是建立一整套高效安全的Java軟件項(xiàng)目開(kāi)發(fā)的控制流程,以到達(dá)軟件工程中對(duì)于軟件開(kāi)發(fā)實(shí)現(xiàn)過(guò)程的要求。

??? CVS工具的作用是提供快捷的方法和清晰的控制流程給開(kāi)發(fā)人員。開(kāi)發(fā)人員則需要在理解先進(jìn)的配置管理和版本控制思想的前提下,使用CVS工具結(jié)合Java開(kāi)發(fā)工具做到真正的高效管理。總之,在現(xiàn)代的項(xiàng)目開(kāi)發(fā)過(guò)程中,CVS已經(jīng)成為解決代碼持續(xù)集成與版本控制的有效工具。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。