日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Subversion 簡(jiǎn)介

 ekylin 2006-08-07

Subversion 簡(jiǎn)介

三千年版本控制

developerWorks
文檔選項(xiàng)
將此頁(yè)作為電子郵件發(fā)送

將此頁(yè)作為電子郵件發(fā)送


最新推薦

Java 應(yīng)用開(kāi)發(fā)源動(dòng)力 - 下載免費(fèi)軟件,快速啟動(dòng)開(kāi)發(fā)


級(jí)別: 中級(jí)

Elliotte Harold (elharo@metalab.unc.edu), 副教授, Polytechnic University

2006 年 7 月 06 日

Elliotte Rusty Harold 介紹了 Subversion —— 一種開(kāi)放源碼、多用戶版本控制系統(tǒng),支持非 ASCII 文本和二進(jìn)制數(shù)據(jù)。通過(guò) Elliotte 的介紹,您可看到如何在 Eclipse 中配置 Subversion 支持(通過(guò) Subclipse 插件)、檢出一個(gè)項(xiàng)目、與您的存儲(chǔ)庫(kù)同步,隨后執(zhí)行一些常用的操作,如合并、修補(bǔ)、比較和刪除。

版本控制之于程序員,就好比安全網(wǎng)之于高空秋千表演者。知道安全網(wǎng)就在那里,萬(wàn)一自己摔落它能夠提供保護(hù),高空秋千表演者才能放心大膽地在空中飛躍。同樣,版本控制使您有能力去冒以往想都不敢想的風(fēng)險(xiǎn)。如果哪兒出了錯(cuò),您總是可以使自己的代碼回復(fù)到一個(gè)已知的、工作正常的版本。您可以在不觸及主干的分支中進(jìn)行試驗(yàn),而不會(huì)影響到其他小組成員。在已經(jīng)發(fā)布的產(chǎn)品的較老版本中發(fā)現(xiàn) bug 時(shí),您可以輕松檢出特定版本,以確認(rèn)、修訂,并生成該 bug 的修補(bǔ)程序。如果沒(méi)有版本控制,您必須極為慎之又慎,緩慢地推進(jìn),總而言之,生產(chǎn)力會(huì)更低。

Subversion 是一種開(kāi)放源碼的全新版本控制系統(tǒng),支持可在本地訪問(wèn)或通過(guò)網(wǎng)絡(luò)訪問(wèn)的數(shù)據(jù)庫(kù)和文件系統(tǒng)存儲(chǔ)庫(kù)。不但提供了常見(jiàn)的比較、修補(bǔ)、標(biāo)記、提交、回復(fù)和分支功能性,Subversion 還增加了追蹤移動(dòng)和刪除的能力。此外,它支持非 ASCII 文本和二進(jìn)制數(shù)據(jù),所有這一切都使 Subversion 不僅對(duì)傳統(tǒng)的編程任務(wù)非常有用,同時(shí)也適于 Web 開(kāi)發(fā)、圖書(shū)創(chuàng)作和其他在傳統(tǒng)方式下未采納版本控制功能的領(lǐng)域。

本文介紹了使用 Subversion 追蹤項(xiàng)目的基礎(chǔ)知識(shí),以使您在編寫(xiě)代碼時(shí)能夠承受更多的風(fēng)險(xiǎn)、享受更多的樂(lè)趣。

版本控制簡(jiǎn)史

當(dāng)我還是一名剛剛畢業(yè)的學(xué)生時(shí),我第一次在國(guó)家太陽(yáng)觀察站(National SSolar Observatory)接觸到了如今版本控制系統(tǒng)的鼻祖 —— SCCS。今天,已經(jīng)出現(xiàn)了數(shù)不勝數(shù)的版本控制系統(tǒng),而 SCCS 也早已被更強(qiáng)大的產(chǎn)品所取代,如 Visual SourceSafe、BitKeeper、Perforce 和開(kāi)源 CVS(參見(jiàn) 參考資料 部分)。

在開(kāi)放源碼程序員間,CVS 已成為一種事實(shí)上的 標(biāo)準(zhǔn)。Codehaus、Sourceforge、Savannah 和 Java™ 社區(qū)的 java.net 等站點(diǎn)中駐留的免費(fèi) CVS 使得為開(kāi)源項(xiàng)目建設(shè)存儲(chǔ)庫(kù)更為簡(jiǎn)單。以 CVS 為中心,已發(fā)展起一個(gè)大型的附件市場(chǎng),包括 TortoiseCVS、ViewCVS 和 Fisheye 等工具。

與其他版本控制系統(tǒng)相比,CVS 最令人稱道的地方就是其非鎖定 存儲(chǔ)庫(kù),這使多個(gè)開(kāi)發(fā)人員能夠同時(shí)檢出同一個(gè)文件。CVS 在提交時(shí)解決沖突問(wèn)題,這就避免了沖突成為發(fā)展的瓶頸。CVS 第二個(gè)出色的特性就是它是一種網(wǎng)絡(luò)存儲(chǔ)庫(kù)。處于許多不同系統(tǒng)上的程序員可以通過(guò)公共的 Internet 訪問(wèn)相同的存儲(chǔ)庫(kù)。

逐漸失去優(yōu)勢(shì)的 CVS

CVS 在過(guò)去的十年中,為社區(qū)提供了優(yōu)質(zhì)的服務(wù),但它陳舊的劣勢(shì)開(kāi)始體現(xiàn)出來(lái)。首先,它實(shí)際上僅能處理 ASCII 文件。Unicode 文件會(huì)令 CVS 嚴(yán)重混亂。此外,CVS 存儲(chǔ)庫(kù)更改起來(lái)極為困難。CVS 沒(méi)有任何關(guān)于 “移動(dòng)” 操作的概念。它只能注意到,一個(gè)文件在一處被刪除了,而在一個(gè)新位置創(chuàng)建了另外一個(gè)文件。由于它不會(huì)連接兩個(gè)操作,因此也很容易使文件歷史軌跡丟失。設(shè)置 CVS 存儲(chǔ)庫(kù)時(shí),您必須非常謹(jǐn)慎地為每個(gè)文件選擇準(zhǔn)確的位置,因?yàn)樵谠O(shè)置之后,您幾乎就要一直使用這個(gè)位置了。

CVS 已經(jīng)不再適合現(xiàn)代開(kāi)發(fā),這一點(diǎn)越來(lái)越明顯。特別是 CVS 只能滿足老式 C 程序員的 ASCII 需求,而對(duì) Web 開(kāi)發(fā)人員和其他非傳統(tǒng)用戶來(lái)說(shuō),CVS 實(shí)際上根本不起作用。在您開(kāi)始考慮存儲(chǔ)整個(gè) Web 站點(diǎn)時(shí),在 CVS 中,將文件從一個(gè)目錄移動(dòng)到另外一個(gè)目錄是關(guān)鍵考慮事項(xiàng)。因此,在幾年前,許多核心 CVS 開(kāi)發(fā)人員認(rèn)為,已經(jīng)到了利用他們多年來(lái)使用 CVS 時(shí)學(xué)到的經(jīng)驗(yàn)和教訓(xùn)、從頭開(kāi)始創(chuàng)建新一代開(kāi)放源碼存儲(chǔ)庫(kù)的時(shí)機(jī)。在 2004 年年初,他們的努力結(jié)出了豐碩的果實(shí),那就是 Subversion 1.0。

Subversion 的支持與采納

程序員(特別是那些依賴版本控制的程序員)是一個(gè)非常謹(jǐn)慎的群體,Subversion 著實(shí)用了很長(zhǎng)一段時(shí)間,才得到他們的廣泛接受。很少有程序員愿意沖在易于流血的最前沿,即便是他們已經(jīng)因?yàn)?CVS 受了傷。甚至是在 Subersion 變得可靠之后,仍然用了好幾年的時(shí)間,所有第三方編輯器、IDE 和文檔規(guī)范才相繼跟進(jìn)。而 Subversion 依然在不斷改進(jìn),BBEdit 和 Eclipse 等第三方工具現(xiàn)在已經(jīng)有了足夠好的 Subversion 支持。逐漸地,新項(xiàng)目也紛紛選擇 Subversion 滿足其版本控制需求,而老項(xiàng)目正在向 Subversion 移植。最近,Apache Software Foundation 已移植到 Subversion。已實(shí)現(xiàn)移植的項(xiàng)目包括 Xerces XML 解析器、Apache HTTP Server 和 Spamassassin。





回頁(yè)首


通過(guò) IDE 使用 Subversion

您可通過(guò)命令行使用 Subversion,但若將其與您的 IDE 集成更為便捷。IntelliJ IDEA 5.0 及后續(xù)版本均包含對(duì) Subversion 的內(nèi)置支持。NetBeans 還不支持 Subversion,但相關(guān)工作已經(jīng)在開(kāi)展,未來(lái)版本中將提供支持。對(duì)于 Eclipse,您需要安裝 Subclipse 插件。本文使用 Eclipse 作為 IDE。

Subclipse 的安裝與其他 Eclipse 插件類似:

  1. 在 Eclipse 中,選擇 Help Software Updates | Find and Install...。

  2. 在向?qū)У牡谝粋€(gè)面板中,單擊 Search for new features to install 單選按鈕,并單擊 Next

  3. 在向?qū)У牡诙€(gè)面板中,單擊 New Remote Site。輸入 Subclipse 作為名稱,輸入 http://subclipse./update_1.0.x 作為 URL。然后單擊 Finish。

    這將啟動(dòng)另外一個(gè)小的向?qū)?。下一個(gè)對(duì)話框應(yīng)為您提供一個(gè)可安裝的特性 —— Subclipse。選中它并單擊 Next

  4. 接受許可協(xié)議,完成安裝。

程序包目前未經(jīng)過(guò)數(shù)字簽名,但只要您是按照第三步的 URL 下載的,就是安全的。

Subversion 快捷方式

如果您目前常常使用 Subversion,您可能希望將其添加到 Eclipse 的 New、Open Perspective 和 Show View 菜單中。為此,選擇 Window/Customize Perspective... 并在 Shortcut 分類列表中選中 SVN。這將使您可在目前可看到 CVS 的所有菜單中訪問(wèn) Subversion。

安裝程序包后,您必須重新啟動(dòng) Eclipse,隨后才能使用 Subversion。完成之后,您就可以與如今使用 CVS 大體相同的方式使用 Subversion 了,只有為數(shù)不多的區(qū)別。

檢出項(xiàng)目

設(shè)置一個(gè)新的 Subversion 存儲(chǔ)庫(kù),特別是網(wǎng)絡(luò)存儲(chǔ)庫(kù)相對(duì)來(lái)說(shuō)較為復(fù)雜。但若您正在連接一個(gè)現(xiàn)有項(xiàng)目,第一次檢出文件就相當(dāng)輕松。在 File 菜單中選擇 New/Other...。這些步驟將為您打開(kāi)如 圖 1 所示的對(duì)話框:


圖 1. 通過(guò) Subversion 啟動(dòng)一個(gè)新項(xiàng)目
通過(guò) SVN 檢出項(xiàng)目

接下來(lái),打開(kāi) SVN 文件夾,選擇 Select Checkout Projects from SVN,并單擊 Next 以顯示如圖 2 所示的對(duì)話框:


圖 2. Select/Create Location
Select/Create Location

第一次從存儲(chǔ)庫(kù)檢出時(shí),您需要選擇 Create a new repository location 并單擊 Next。這將為您打開(kāi)如圖 3 所示的對(duì)話框:


圖 3. 為存儲(chǔ)庫(kù)鍵入 URL
為存儲(chǔ)庫(kù)鍵入 URL

您在這里提供存儲(chǔ)庫(kù)的 URL。這只是一個(gè)普通的 http URL,如 http://svn./repos/asf/xerces/java/。這一次單擊 Next 時(shí),Eclipse 連接到存儲(chǔ)庫(kù),并查找可檢出的文件夾。通常有三個(gè)文件夾:branches、tags 和 trunk,如圖 4 所示。Branches 文件夾用于試驗(yàn)。Tags 通常標(biāo)識(shí)較老的、已發(fā)布的軟件版本。而大多數(shù)時(shí)候,您都希望在主分支上工作(CVS 稱之為 HEAD),因此選擇 trunk 并單擊 Next。


圖 4. 選擇要檢出的修訂版
選擇文件夾

您現(xiàn)在有兩個(gè)選擇:Check out as a Project configured using the New Project WizardCheck out as a project in the workspace,如圖 5 所示。您可按自己的需要任意選擇,您可能希望為項(xiàng)目命名,因?yàn)槟J(rèn)名稱為 “trunk”。最后,單擊 Finish。


圖 5. 檢出項(xiàng)目的兩種方法
檢出項(xiàng)目的兩種方法

Eclipse 現(xiàn)在從您選擇的分支、主干或標(biāo)記中下載所有源文件。如果您選擇的是 Check out as a project in the workspace,則必須完成 Eclipse 的 New Project 向?qū)В栽O(shè)置編譯器級(jí)別、項(xiàng)目布局和其他選項(xiàng)。如果您未使用 New Project 向?qū)?,則需要手動(dòng)設(shè)置構(gòu)建路徑和其他選項(xiàng),就像您在自己的文件系統(tǒng)的一個(gè)目錄中創(chuàng)建了一個(gè)項(xiàng)目那樣。確實(shí),您所做的與那極為相似。所有文件都是本地存儲(chǔ)的。對(duì)于構(gòu)建、運(yùn)行和調(diào)試這樣的普通操作,Eclipse 不關(guān)心文件是否已為版本控制檢出。





回頁(yè)首


驗(yàn)證設(shè)置

此時(shí),最好進(jìn)行一次快速、明智的檢查,確保您已正確地設(shè)置了構(gòu)建路徑。如果沒(méi)有明顯的問(wèn)題,并且能夠運(yùn)行單元測(cè)試,那么即可放心地繼續(xù)下去了。

如果存在問(wèn)題,檢查項(xiàng)目屬性,以確保正確地設(shè)置了源路徑和類路徑。使之差一非常常見(jiàn),無(wú)論是多一還是少一。因此,最終 Eclipse 會(huì)認(rèn)為您的類的名稱類似于 src.org.apache.xerces.parsers.SAXParserapache.xerces.parsers.SAXParser,而不是 org.apache.xerces.parsers.SAXParser。在多文件夾項(xiàng)目中,Eclilpse 也常常會(huì)錯(cuò)誤地將一個(gè)數(shù)據(jù)文件夾標(biāo)記為源文件夾或遺漏了一個(gè)源文件夾。如果發(fā)生了以上任何一種小故障,您都必須修復(fù)錯(cuò)誤,然后才能基礎(chǔ)。

多文件提交

Subversion 可在一個(gè)原子操作中提交數(shù)個(gè)文件(與之形成對(duì)比,CVS 將每一個(gè)分開(kāi)的文件視為一次獨(dú)立提交)。為此,只需在 Package Explorer 中選擇您想提交的所有文件(按住 ctrl 鍵或 Command 鍵,然后依次單擊所需文件),然后在上下文菜單中選擇 Team/Commit... 即可。如果您隨后需要取消更改或?qū)⒋鎯?chǔ)庫(kù)回復(fù)到特定更改之前的狀態(tài),這種方法非常有用。

要檢查錯(cuò)誤,選擇 Project | Properties,然后找到 Java Build Path。您可在 source 選項(xiàng)卡中修訂任何向?qū)ё鲥e(cuò)的地方。您可能還要添加另外一個(gè)項(xiàng)目需要的 JAR 歸檔,Eclpse 在檢出時(shí)不會(huì)注意到此歸檔。您還可在 library 選項(xiàng)卡的 Java Build Path 中添加此歸檔。

請(qǐng)做好心理準(zhǔn)備,您可能要在這里花上一點(diǎn)時(shí)間。Eclipse 很少會(huì)在第一次就讓一切正確無(wú)誤,每個(gè)項(xiàng)目組織其文件和庫(kù)的方式又總會(huì)有所不同。

與存儲(chǔ)庫(kù)同步

接下來(lái)您就可以照常編輯文件了。作出您希望的任何更改。運(yùn)行單元測(cè)試。優(yōu)化代碼。更正注釋中的拼寫(xiě)錯(cuò)誤。完成部分工作后,使用上下文菜單并選擇 Team/Commit...。您將看到圖 6 所示的對(duì)話框,要求您輸入提交注釋:


圖 6. Subclipse 的提交對(duì)話框
提交

同樣,若其他人更改了您希望應(yīng)用于您的副本的存儲(chǔ)庫(kù),只要在 Package Explorer 中選中文件,并從上下文菜單中選擇 Team/Update 即可。這會(huì)以主副本替換您的副本。





回頁(yè)首


合并

如果您已進(jìn)行了更改,其他開(kāi)發(fā)人員也進(jìn)行了更改,那么您就必須手動(dòng)合并文件。對(duì)于絕大多數(shù)簡(jiǎn)單更改,Subversion 可推斷出需要進(jìn)行怎樣的處理,無(wú)需人工干預(yù)。但對(duì)于較大、較為復(fù)雜、存在沖突的更改,您可能需要參與進(jìn)來(lái),手動(dòng)合并更改。

Subclipse 在這里可提供一些幫助,但實(shí)際上我發(fā)現(xiàn),在一個(gè)獨(dú)立的窗口或選項(xiàng)卡中直接實(shí)現(xiàn)一個(gè)臨時(shí)文件副本,通過(guò)存儲(chǔ)庫(kù)更新本地副本以覆蓋我的更改,然后通過(guò)臨時(shí)副本重新輸入更改,這樣做往往更容易。若存儲(chǔ)庫(kù)中的更改與我做出的更改相比較少,我就會(huì)從存儲(chǔ)庫(kù)實(shí)現(xiàn)臨時(shí)副本,并通過(guò)它進(jìn)行提交,而不是更新。隨后我會(huì)重新應(yīng)用那些更改。這聽(tīng)上去非常復(fù)雜,但事實(shí)通常并非如此,它的發(fā)生幾率幾乎與您希望的一樣低。即便是您出了錯(cuò),忘記重新應(yīng)用更改或是錯(cuò)誤地應(yīng)用了更改,總是可以找到所有更改的完整歷史(包括您覆蓋的那些更改)供您參考。實(shí)際上您從未徹底丟失任何東西。

如果您不確定已更改了哪些文件,同步視圖可以為您顯示這些文件。您還可打開(kāi)標(biāo)簽修飾(label decoration)來(lái)查看上次提交/更新后哪些文件發(fā)生過(guò)更改。選擇 Help | Preferences,然后再選擇 General/Appearance/Label Decorations。然后選中 SVN 復(fù)選框。(實(shí)際上該復(fù)選框在默認(rèn)情況下就是選中的。)





回頁(yè)首


修補(bǔ)

如果您不具備正在使用的存儲(chǔ)庫(kù)的提交權(quán)限,就需要制作一個(gè)修補(bǔ)程序,然后將其發(fā)送給維護(hù)人員。只要選中您希望比較的文件,然后從上下文菜單中選擇 Team/Create Patch... 即可。您可以隨自己的方便將修補(bǔ)程序保存到文件或剪貼板中。隨后可通過(guò)電子郵件將其發(fā)送給維護(hù)人員,或者在 bug 報(bào)告中附上該修補(bǔ)程序。修補(bǔ)程序本身采用的格式與 CVS 所使用的 diff 格式相同。

應(yīng)用他人發(fā)送給您的修補(bǔ)程序就沒(méi)那么復(fù)雜了,只要選中您想修補(bǔ)的文件或項(xiàng)目。從上下文菜單中選擇 Team/Apply Patch... ,然后平臺(tái)上慣用的 open file 對(duì)話框選擇修補(bǔ)程序文件即可。





回頁(yè)首


比較

如果您已作出了一些更改,并且希望看看您的副本與存儲(chǔ)庫(kù)中的版本有怎樣的差別,只需在上下文菜單中選擇 Compare/Latest From Repository 即可。這實(shí)際上與 CVS 中比較功能的工作方式完全相同。圖 7 顯示了比較功能的工作情況:


圖 7. 在 Subclipse 中比較兩個(gè)文件





回頁(yè)首


刪除

刪除文件也很輕松。只要在 Eclipse 的程序包管理器中刪除文件,然后提交父文件夾即可。刪除目錄要略微復(fù)雜一點(diǎn)。您可以選擇一個(gè)目錄并刪除它。目錄中的所有文件將會(huì)立即被刪除。但在您刪除后,目錄本身及其所有子目錄又會(huì)立即出現(xiàn)在原來(lái)的位置。要真正地刪除一個(gè)文件夾,您需要選中 “已刪除” 的文件夾并提交它。同一規(guī)則也適用于將一個(gè)文件從一個(gè)位置移動(dòng)到另外一個(gè)位置的情況。

小心!

Apache 項(xiàng)目將源代碼提交到了不屬于自己、現(xiàn)在也無(wú)法刪除的 Subversion 存儲(chǔ)庫(kù)中,使自己陷入麻煩。Apache 可以隱藏代碼,但如果您知道到哪兒去看,您會(huì)發(fā)現(xiàn)這些代碼就在那兒。擁有源代碼的人可能是惡意的,也有可能向 Apache 的 ISP 發(fā)送一條 DMCA 下線通知,從而使 Apache 脫離 Internet。Apache 惟一的防御措施就是徹底刪除其存儲(chǔ)庫(kù)。

在您刪除了一個(gè)文件或一個(gè)文件夾之后,依然可以通過(guò)存儲(chǔ)庫(kù)使其還原,即便是已經(jīng)提交了刪除。一旦您將任何內(nèi)容放進(jìn)存儲(chǔ)庫(kù),那么就永遠(yuǎn)不會(huì)真正、永久地失去它,這有時(shí)候會(huì)產(chǎn)生問(wèn)題。例如,假設(shè)您發(fā)現(xiàn)有人意外的檢入了其整個(gè)主目錄,包括其 Quicken 數(shù)據(jù)文件和所有來(lái)自其愛(ài)人的情書(shū)歸檔。您很希望能夠徹底消除 這些被誤提交的文件,這樣就不會(huì)有其他人得到這些文件。盡管這是一個(gè)非同尋常的操作(無(wú)論如何,版本控制系統(tǒng)的目的就在于永遠(yuǎn)地保留每一個(gè)文件的每個(gè)修訂版),但有時(shí)也是必要的。令人沮喪的是,Subversion 漏掉了這個(gè)重要的特性。

由于沒(méi)有徹底消除的命令,所以我在為外部可見(jiàn)的存儲(chǔ)庫(kù)使用 Subversion 時(shí)非常不安。CVS 也沒(méi)有這樣的命令,但在 CVS 中,您完全有可能在不毀掉存儲(chǔ)庫(kù)的情況下手動(dòng)刪除錯(cuò)誤提交的文件。





回頁(yè)首


結(jié)束語(yǔ)

對(duì)于內(nèi)部存儲(chǔ)庫(kù),Subversion 提供了遠(yuǎn)超過(guò) CVS 的改進(jìn)。如果添加了某種類型的徹底消除功能,它也應(yīng)同樣適于外部存儲(chǔ)庫(kù)。盡管像 Eclipse 這樣的工具對(duì) Subversion 的第三方支持還不像 CVS 支持那樣普遍,但形勢(shì)正在迅速地發(fā)生變化。Subversion 會(huì)成為新項(xiàng)目的默認(rèn)源代碼存儲(chǔ)庫(kù)。尚無(wú)源代碼控制的現(xiàn)有項(xiàng)目應(yīng)盡快檢入 Subversion。而已有 CVS 存儲(chǔ)庫(kù)的現(xiàn)有項(xiàng)目可能仍在觀望,希望等到他們所依賴的全部工具均全面支持 Subversion 后再進(jìn)行切換。但這些項(xiàng)目最終也會(huì)移植到 Subversion。Subversion 中的改進(jìn)如此顯著,令人難以忽略。未來(lái)必將屬于 Subversion。





回頁(yè)首


參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)
  • Subversion:針對(duì)不同平臺(tái)的開(kāi)放源碼及二進(jìn)制版本。

  • Subclipse:Eclipse Subversion 插件。

  • Teepee:NetBeans Subversion 項(xiàng)目。

  • TMate:IntelliJ IDEA Subversion 插件。


討論




回頁(yè)首


關(guān)于作者

Elliotte Rusty Harold 來(lái)自新奧爾良, 現(xiàn)在他還定期回老家喝一碗美味的秋葵湯。不過(guò)目前,他和妻子 Beth 定居在紐約臨近布魯克林的 Prospect Heights,同住的還有他的貓咪 Charm(取自夸克)和 Marjorie(取自他岳母的名字)。他是 Polytechnic 大學(xué)計(jì)算機(jī)科學(xué)系的一名副教授,講授 Java 和面向?qū)ο缶幊?。他?Cafe au Lait Web 站點(diǎn)已經(jīng)成為 Internet 上最流行的獨(dú)立 Java 站點(diǎn)之一,它的姊妹站點(diǎn) Cafe con Leche 是最流行的 XML 站點(diǎn)之一。他編寫(xiě)的圖書(shū)包括 Effective XMLProcessing XML with Java、Java Network ProgrammingJava I/O。目前,他在從事處理 XML 的 XOM API、Jaxen XPath 引擎和 Jester 測(cè)試覆蓋工具的開(kāi)發(fā)工作。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多