ivy中文參考文檔(6)-最佳實(shí)踐(上)
這里有一些我們從我們的經(jīng)驗(yàn)和一些客戶(hù)的顧問(wèn)工作中收集到的建議和最佳實(shí)踐。1) 為所有的模塊添加模塊描述符
在ivy的世界種,模塊描述符是ivy文件的一種,基本上是簡(jiǎn)單的xml文件,用來(lái)描述模塊生產(chǎn)什么作為制品和它的依賴(lài)。
為你的開(kāi)發(fā)涉及到的所有模塊編寫(xiě)或者下載模塊描述符是一個(gè)好習(xí)慣,甚至是為你的第三方依賴(lài),哪怕他們不提供他們自己的模塊描述符。
開(kāi)始這將看上去像是一個(gè)額外的工作,并且需要時(shí)間。但是當(dāng)你擁有多個(gè)模塊同時(shí)使用相同的第三方類(lèi)庫(kù),你僅僅需要在你的ivy文件中添加一行就可以得到這個(gè)類(lèi)庫(kù)和它特有的你真正需要的依賴(lài)(如果你的倉(cāng)庫(kù)中有正確的模塊描述符,尤其是和模塊配置一起使用)。當(dāng)你想更新一個(gè)依賴(lài)時(shí)它將非常有幫助。在你的模塊的ivy文件中一個(gè)簡(jiǎn)單的修改就可以得到更新過(guò)的版本和它更新(或者沒(méi)有)過(guò)的依賴(lài)。
因此我們推薦在你的倉(cāng)庫(kù)中為所有的模塊添加ivy文件,你甚至可以通過(guò)設(shè)置你的解析器上的allownomd 屬性為false來(lái)強(qiáng)制執(zhí)行這個(gè)規(guī)則。你不需要使用依賴(lài)制品的包含/排除/specification這些ivy特性,這些僅僅可以用于非常特殊的情況。
2) 使用自己的企業(yè)倉(cāng)庫(kù)
對(duì)于開(kāi)源項(xiàng)目而言這通常不是一個(gè)正確的建議,但是對(duì)于企業(yè)世界我們強(qiáng)烈建議遮掩做來(lái)避免依賴(lài)一個(gè)公共的倉(cāng)庫(kù)類(lèi)似mave ibiblio 或者ivyrep.為什么? 好,這里有一堆理由:
1. 控制
對(duì)于公共倉(cāng)庫(kù)最主要的問(wèn)題在于你沒(méi)有倉(cāng)庫(kù)的控制權(quán)。這意味著如果一個(gè)模塊描述符損壞,你不能輕易的修復(fù)它。當(dāng)然你可以使用一個(gè)由共享倉(cāng)庫(kù)和公共倉(cāng)庫(kù)組成的鏈,并且將你修復(fù)后的模塊描述符放置到共享倉(cāng)庫(kù)以便它能隱藏公共倉(cāng)庫(kù),但是這會(huì)導(dǎo)致倉(cāng)庫(kù)瀏覽和維護(hù)的麻煩。
更多的問(wèn)題在于倉(cāng)庫(kù)可能的更新。我們知道在倉(cāng)庫(kù)中發(fā)布的版本應(yīng)該保持穩(wěn)定并且不要更新,但是我們也頻繁的看到模塊描述符有很多bug,或者制品被損壞。甚至某些時(shí)候我們看到一個(gè)新的版本使用和之前版本相同的名字發(fā)布,因?yàn)榍耙粋€(gè)版本只不過(guò)是被錯(cuò)誤打包。這種情況設(shè)置發(fā)生在最好的東西上,比如我們的ivy1.2 :-)。 后來(lái)我們決定發(fā)布一個(gè)新的使用不同名字1.2a的版本。但是如果倉(cāng)庫(kù)管理員容許類(lèi)似的更新,這意味著以前的工作可以被打破。這將破壞你的構(gòu)建的可再現(xiàn)性。
2. 可靠性
mave倉(cāng)庫(kù)的可靠性并不是很好(我們經(jīng)常體驗(yàn)到非常慢的速度,甚至完全無(wú)法訪(fǎng)問(wèn)),同時(shí)ivyrep僅僅被一個(gè)小公司支持(是的,我們僅僅是一個(gè)小公司). 因?yàn)樗俣嚷途W(wǎng)站掛起的情況會(huì)同樣發(fā)生。并且如果你依賴(lài)的倉(cāng)庫(kù)倒下,這將導(dǎo)致你的開(kāi)發(fā)或者發(fā)布過(guò)程嚴(yán)重減緩。
3. 準(zhǔn)確性
公共的倉(cāng)庫(kù)通常包含遠(yuǎn)比你實(shí)際需要多的東西。這是一個(gè)問(wèn)題嗎?我們是這樣想的。我們認(rèn)為在一個(gè)企業(yè)環(huán)境中你使用的類(lèi)庫(kù)在被你的公司的每個(gè)項(xiàng)目使用前需要有一些驗(yàn)證過(guò)程。而做這個(gè)事情做好的方式是什么?建立一個(gè)僅僅包含你實(shí)際需要使用的類(lèi)庫(kù)的企業(yè)倉(cāng)庫(kù)。這將不僅僅可以保證你的運(yùn)用依賴(lài)有更好的質(zhì)量,而且?guī)椭阍诿總€(gè)地方使用相同的版本,甚至可以再申明你的模塊依賴(lài)時(shí)得到幫助。如果你使用類(lèi)似ivyde的工具,代碼自動(dòng)完成會(huì)緊緊顯示你倉(cāng)庫(kù)的恰當(dāng)信息,和你實(shí)際需要使用的類(lèi)庫(kù)。
4. 安全
從模塊倉(cāng)庫(kù)瞎子啊的制品通常是可執(zhí)行的,這將牽扯到安全問(wèn)題。想象一個(gè)黑客用一個(gè)包含病毒的版本替換commons-lang?如果你依賴(lài)公共倉(cāng)庫(kù)來(lái)構(gòu)建你的軟件,它將有安全方面的風(fēng)險(xiǎn)。你在這里看到可以看到更多的相關(guān)信息 Forrester article。
注意,不是說(shuō)因?yàn)橐褂闷髽I(yè)倉(cāng)庫(kù)就不得不徹底的通過(guò)手工來(lái)構(gòu)建。ivy有一個(gè)安裝任務(wù)可以被用來(lái)從一個(gè)倉(cāng)庫(kù)安裝模塊到另外一個(gè),因此它可以用來(lái)有選擇的從公共倉(cāng)庫(kù)安裝模塊到你的企業(yè)倉(cāng)庫(kù),這里你將有能力確保控制,可靠性和準(zhǔn)確性。
3) 至少在組織和模塊上使用模式
ivy非常靈活并且通過(guò)使用模式的概念可以適應(yīng)很多現(xiàn)存的倉(cāng)庫(kù)。但是如果你的倉(cāng)庫(kù)現(xiàn)在還不存在,我們強(qiáng)烈建議總是在你的模式中使用組織和模塊名,甚至是你僅僅放置你自己的模塊的私有倉(cāng)庫(kù)(這里所有的組織都是相同的)。為什么?因?yàn)閕vy listing feature(清單特性?)依賴(lài)在模式中找到的標(biāo)記。如果你的模式中沒(méi)有組織標(biāo)記,ivy將不能列出你倉(cāng)庫(kù)中的組織。舉例說(shuō)對(duì)于在ivyde中的代碼自動(dòng)完成這將是一個(gè)問(wèn)題,同樣對(duì)于倉(cāng)庫(kù)范圍的任務(wù)如安裝和倉(cāng)庫(kù)報(bào)告也是如此。
4) 為公共倉(cāng)庫(kù)發(fā)布ivysettings.xml
如果你創(chuàng)建了一個(gè)公共倉(cāng)庫(kù),請(qǐng)?zhí)峁┮粋€(gè)ivysettings.xml對(duì)應(yīng)的URL地址。這很容易做到,如果有人想leverage你的倉(cāng)庫(kù),他僅僅需要設(shè)置這個(gè)你的ivysettings.xml的URL就可以裝載它,或者在它自己的配置文件中包含它,這使得聯(lián)合多個(gè)公共倉(cāng)庫(kù)變得十分容易。
posted on 2009-07-11 10:43 sky ao 閱讀(1344) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): project building