Sky's blog

          我和我追逐的夢(mèng)

          常用鏈接

          統(tǒng)計(jì)

          其他鏈接

          友情鏈接

          最新評(píng)論

          ivy中文參考文檔(6)-最佳實(shí)踐(上)

              這里有一些我們從我們的經(jīng)驗(yàn)和一些客戶的顧問工作中收集到的建議和最佳實(shí)踐。

          1) 為所有的模塊添加模塊描述符

              在ivy的世界種,模塊描述符是ivy文件的一種,基本上是簡(jiǎn)單的xml文件,用來描述模塊生產(chǎn)什么作為制品和它的依賴。

              為你的開發(fā)涉及到的所有模塊編寫或者下載模塊描述符是一個(gè)好習(xí)慣,甚至是為你的第三方依賴,哪怕他們不提供他們自己的模塊描述符。

              開始這將看上去像是一個(gè)額外的工作,并且需要時(shí)間。但是當(dāng)你擁有多個(gè)模塊同時(shí)使用相同的第三方類庫(kù),你僅僅需要在你的ivy文件中添加一行就可以得到這個(gè)類庫(kù)和它特有的你真正需要的依賴(如果你的倉(cāng)庫(kù)中有正確的模塊描述符,尤其是和模塊配置一起使用)。當(dāng)你想更新一個(gè)依賴時(shí)它將非常有幫助。在你的模塊的ivy文件中一個(gè)簡(jiǎn)單的修改就可以得到更新過的版本和它更新(或者沒有)過的依賴。

              因此我們推薦在你的倉(cāng)庫(kù)中為所有的模塊添加ivy文件,你甚至可以通過設(shè)置你的解析器上的allownomd 屬性為false來強(qiáng)制執(zhí)行這個(gè)規(guī)則。你不需要使用依賴制品的包含/排除/specification這些ivy特性,這些僅僅可以用于非常特殊的情況。

          2) 使用自己的企業(yè)倉(cāng)庫(kù)

              對(duì)于開源項(xiàng)目而言這通常不是一個(gè)正確的建議,但是對(duì)于企業(yè)世界我們強(qiáng)烈建議遮掩做來避免依賴一個(gè)公共的倉(cāng)庫(kù)類似mave ibiblio 或者ivyrep.為什么? 好,這里有一堆理由:

              1.  控制

              對(duì)于公共倉(cāng)庫(kù)最主要的問題在于你沒有倉(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ù)的麻煩。

              更多的問題在于倉(cāng)庫(kù)可能的更新。我們知道在倉(cāng)庫(kù)中發(fā)布的版本應(yīng)該保持穩(wěn)定并且不要更新,但是我們也頻繁的看到模塊描述符有很多bug,或者制品被損壞。甚至某些時(shí)候我們看到一個(gè)新的版本使用和之前版本相同的名字發(fā)布,因?yàn)榍耙粋€(gè)版本只不過是被錯(cuò)誤打包。這種情況設(shè)置發(fā)生在最好的東西上,比如我們的ivy1.2 :-)。 后來我們決定發(fā)布一個(gè)新的使用不同名字1.2a的版本。但是如果倉(cāng)庫(kù)管理員容許類似的更新,這意味著以前的工作可以被打破。這將破壞你的構(gòu)建的可再現(xiàn)性。

              2. 可靠性

              mave倉(cāng)庫(kù)的可靠性并不是很好(我們經(jīng)常體驗(yàn)到非常慢的速度,甚至完全無法訪問),同時(shí)ivyrep僅僅被一個(gè)小公司支持(是的,我們僅僅是一個(gè)小公司). 因?yàn)樗俣嚷途W(wǎng)站掛起的情況會(huì)同樣發(fā)生。并且如果你依賴的倉(cāng)庫(kù)倒下,這將導(dǎo)致你的開發(fā)或者發(fā)布過程嚴(yán)重減緩。

              3. 準(zhǔn)確性

              公共的倉(cāng)庫(kù)通常包含遠(yuǎn)比你實(shí)際需要多的東西。這是一個(gè)問題嗎?我們是這樣想的。我們認(rèn)為在一個(gè)企業(yè)環(huán)境中你使用的類庫(kù)在被你的公司的每個(gè)項(xiàng)目使用前需要有一些驗(yàn)證過程。而做這個(gè)事情做好的方式是什么?建立一個(gè)僅僅包含你實(shí)際需要使用的類庫(kù)的企業(yè)倉(cāng)庫(kù)。這將不僅僅可以保證你的運(yùn)用依賴有更好的質(zhì)量,而且?guī)椭阍诿總€(gè)地方使用相同的版本,甚至可以再申明你的模塊依賴時(shí)得到幫助。如果你使用類似ivyde的工具,代碼自動(dòng)完成會(huì)緊緊顯示你倉(cāng)庫(kù)的恰當(dāng)信息,和你實(shí)際需要使用的類庫(kù)。

              4. 安全
              從模塊倉(cāng)庫(kù)瞎子啊的制品通常是可執(zhí)行的,這將牽扯到安全問題。想象一個(gè)黑客用一個(gè)包含病毒的版本替換commons-lang?如果你依賴公共倉(cāng)庫(kù)來構(gòu)建你的軟件,它將有安全方面的風(fēng)險(xiǎn)。你在這里看到可以看到更多的相關(guān)信息 Forrester article。

              注意,不是說因?yàn)橐褂闷髽I(yè)倉(cāng)庫(kù)就不得不徹底的通過手工來構(gòu)建。ivy有一個(gè)安裝任務(wù)可以被用來從一個(gè)倉(cāng)庫(kù)安裝模塊到另外一個(gè),因此它可以用來有選擇的從公共倉(cāng)庫(kù)安裝模塊到你的企業(yè)倉(cāng)庫(kù),這里你將有能力確保控制,可靠性和準(zhǔn)確性。

          3) 至少在組織和模塊上使用模式

              ivy非常靈活并且通過使用模式的概念可以適應(yīng)很多現(xiàn)存的倉(cāng)庫(kù)。但是如果你的倉(cāng)庫(kù)現(xiàn)在還不存在,我們強(qiáng)烈建議總是在你的模式中使用組織和模塊名,甚至是你僅僅放置你自己的模塊的私有倉(cāng)庫(kù)(這里所有的組織都是相同的)。為什么?因?yàn)閕vy listing feature(清單特性?)依賴在模式中找到的標(biāo)記。如果你的模式中沒有組織標(biāo)記,ivy將不能列出你倉(cāng)庫(kù)中的組織。舉例說對(duì)于在ivyde中的代碼自動(dòng)完成這將是一個(gè)問題,同樣對(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)  編輯  收藏 所屬分類: project building

          主站蜘蛛池模板: 宁南县| 西华县| 原阳县| 鄂伦春自治旗| 闵行区| 西丰县| 潜山县| 巴青县| 城固县| 宁蒗| 家居| 通化县| 朝阳区| 瓮安县| 道孚县| 那坡县| 宁阳县| 宿迁市| 吴忠市| 阳新县| 宣汉县| 肇源县| 彰化县| 凤翔县| 社旗县| 岫岩| 灌南县| 西安市| 江阴市| 岑巩县| 通道| 绥芬河市| 黔西县| 大洼县| 连江县| 胶南市| 益阳市| 始兴县| 茶陵县| 怀宁县| 新乡县|