Sky's blog

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

          常用鏈接

          統(tǒng)計(jì)

          其他鏈接

          友情鏈接

          最新評(píng)論

          ivy中文參考文檔(4)-主要概念(下)

              ivy中引入了一些自己的概念,了解并理會(huì)這些概念對(duì)ivy的學(xué)習(xí)使用是有幫助的。這里翻譯一下官網(wǎng)的介紹ivy主要概念的文章,原文在此:http://ant.apache.org/ivy/history/2.1.0-rc1/concept.html

              因內(nèi)容太長(zhǎng)而拆分,下面是第二部分:



          六. 沖突管理器

              沖突管理器可以在沖突的模塊修訂本列表中選擇需要保留的修訂本。

              如果修訂本對(duì)應(yīng)相同的模塊,舉例說相同的組織/模塊名對(duì),那么稱為沖突的修訂本列表。

              可用的沖突管理器列表在可以沖突管理器頁(yè)面可以得到。

              想得到更多如果配置沖突管理器的細(xì)節(jié),請(qǐng)看ivy文件參考的沖突章節(jié)。

          七. Pattern matcher 模式匹配

              從1.3之后在很多地方ivy使用模式來匹配一系列對(duì)象。例如,當(dāng)通過使用匹配所有想排除的模塊的模式來聲明一個(gè)依賴時(shí),你可以立即排除這多個(gè)模塊。

              ivy使用可插入式的模式匹配器來匹配哪些對(duì)象名。默認(rèn)定義好的有3個(gè):

              * exact
                  This matcher matches only string when they are equal to the pattern one
                  這個(gè)匹配器僅匹配字符串,要求和模式相同。

              * regexp
              這個(gè)匹配器容許你使用java1.4或者更高版本的Pattern類支持的正則表達(dá)式

              * glob
              這個(gè)匹配器容許你使用unix風(fēng)格的glob匹配器,僅有的能使用的字符是匹配任何字符串的*和精確匹配單個(gè)字符的?。注意僅僅當(dāng)jakarta oro2.0.8在classpath中時(shí)這個(gè)匹配器才可以使用。

              同樣請(qǐng)注意,在任何匹配器中,字符'*'有匹配任意東西的特殊含義。對(duì)于不依賴匹配器的默認(rèn)值尤其有用。


          八. 附加屬性

              從1.4版本之后在ivy的xml文件中有幾個(gè)標(biāo)簽是可以通過被稱為附加屬性的東西來進(jìn)行擴(kuò)展。想法很簡(jiǎn)單:如果你需要更多信息來定義你的模塊,你可以添加你需要的屬性,然后能夠像訪問其他屬性一樣訪問它,比如在你的模式中。
              從2.0版本之后,可以并且推薦為你的附加屬性使用xml命名空間。使用ivy附加命名空間是最簡(jiǎn)單的添加你自己的附件屬性的方法。

              例如:
              這里是一個(gè)ivy文件,屬性'color'設(shè)置為blue:
              <ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
              <info organisation="apache"
                     module="foo"
                     e:color="blue"
                     status="integration"
                     revision="1.59"
              />
              </ivy-module>

              這樣當(dāng)你定義一個(gè)基于foo的依賴時(shí)你就必須使用附加屬性。那些附加屬性 被作為標(biāo)識(shí)符實(shí)際使用,類似org,name和revision。
              <dependency org="apache" name="foo" e:color="blue" rev="1.5+" />
              你還可以這樣定義你的倉(cāng)庫(kù)模式:
              ${repository.dir}/[organisation]/[module]/[color]/[revision]/[artifact].[ext]
              注意在模式中科你必須使用非限定屬性名(不帶命名空間前綴)

              如果你不想使用xml命名空間,這是可以做到的,但是你需要使ivy文件驗(yàn)證失效,因?yàn)槟愕奈募辉俜先魏握降膇vy xsd。查看設(shè)置文檔來得知如何使驗(yàn)證失效。


          九. 校驗(yàn)和
              從1.4版本后,ivy容許使用校驗(yàn)和,被稱為digester,來驗(yàn)證下載文件的正確性。
              目前ivy支持MD5和sha1算法。

              使用MD5還是sha1的配置可以是全局的,或者是由依賴解析器設(shè)置。全局是使用變量ivy.checksums來列舉要進(jìn)行的檢測(cè)(僅支持md5和sha1),在每個(gè)解析器上你可以使用屬性

          checksums來覆蓋全局設(shè)置。

              設(shè)置是逗號(hào)分隔的使用的校驗(yàn)和算法。
              在檢測(cè)過程中(下載的時(shí)候),找到的第一個(gè)校驗(yàn)和將被檢測(cè),然后就結(jié)束。這意外著如果你設(shè)置為"sha1, md5",那么如果ivy發(fā)現(xiàn)了一個(gè)sha1文件,它將使用這個(gè)sha1來比較下載文件的sha1,并且如果比較是通過的,ivy將認(rèn)為這個(gè)文件是正確的。如果沒有發(fā)現(xiàn)sha1文件,ivy將查找md5文件。如果沒有發(fā)現(xiàn)任何一個(gè),將不進(jìn)行檢測(cè)。
              在發(fā)布過程中,任何例舉出來的校驗(yàn)和算法都將被計(jì)算和上傳。

              默認(rèn)的校驗(yàn)和算法是"sha1, md5"。
              如果你想修改這個(gè)默認(rèn)值,你可以設(shè)置變量ivy.checksums。因此想使校驗(yàn)和驗(yàn)證失效,你僅僅需要設(shè)置ivy.checksums為""。


          十. 事件和觸發(fā)器

              從1.4版本之后,當(dāng)ivy完成依賴的解析和一些其他任務(wù),ivy將在最重要的步驟前后發(fā)出事件。你可以使用ivy的api來監(jiān)聽這些事件,或者你甚至可以注冊(cè)一個(gè)觸發(fā)器在特定事件發(fā)生時(shí)來執(zhí)行特定的動(dòng)作。

              這是尤其強(qiáng)大而靈活的特性,例如它容許在依賴解析前執(zhí)行依賴的構(gòu)建,或者在依賴解析過程中精確地追蹤發(fā)生的事情。

              更多關(guān)于時(shí)間和觸發(fā)器的細(xì)節(jié),請(qǐng)看本文檔的配置章節(jié)中的觸發(fā)器文檔頁(yè)面。

          十一. 循環(huán)依賴

              從1.4版本之后,循環(huán)依賴可以是直接或者間接。例如,如果A依賴A,這是循環(huán)依賴,如果A依賴B而B依賴A,這也是循環(huán)依賴。

              在ivy1.4之前循環(huán)依賴會(huì)導(dǎo)致viy產(chǎn)生錯(cuò)誤。到ivy1.4止,當(dāng)ivy發(fā)現(xiàn)循環(huán)依賴時(shí)的行為可以通過循環(huán)依賴策略來配置。

              3個(gè)內(nèi)建的策略可用:

              * ignore/忽略
                  循環(huán)依賴僅僅用詳細(xì)的信息警告進(jìn)行標(biāo)志。
              * warn / 警告
                  和忽略相同,除非它們被標(biāo)識(shí)為警告(默認(rèn))
              * error / 錯(cuò)誤
                  發(fā)現(xiàn)循環(huán)依賴時(shí)終止依賴解析

              查看配置頁(yè)面來看如果配置你想使用的循環(huán)依賴策略。

          十二. 緩存和變更管理

              ivy非常依賴本地緩存來避免過于頻繁的訪問遠(yuǎn)程倉(cāng)庫(kù),從而節(jié)約網(wǎng)絡(luò)帶寬和時(shí)間。

          1) 緩存類型

              ivy緩存由兩個(gè)不同部分組成:

              * 倉(cāng)庫(kù)緩存
                  倉(cāng)庫(kù)緩存是ivy保存從模塊倉(cāng)庫(kù)下載的數(shù)據(jù)的地方,和一些關(guān)系到這些制品的元信息在一起,和他們的原始位置一樣。

              * 解析緩存
              這個(gè)部分的緩存用來保存被ivy用來重用解析過程的結(jié)果的解析數(shù)據(jù)。
              這個(gè)部分的緩存每次完成一次新的解析時(shí)都被覆蓋,并且決不能被多進(jìn)程同時(shí)使用。

              通常只有一個(gè)解析緩存,但是你可以定義多個(gè)倉(cāng)庫(kù)緩存,每個(gè)解析器可以使用單獨(dú)的緩存。

          2) 變更管理

              為了加快依賴解析和緩存使用的方法,ivy默認(rèn)認(rèn)為修訂本從不修改。因此一旦ivy在它的緩存中有這個(gè)模塊(元數(shù)據(jù)或者制品),ivy信任緩存,甚至不再查詢倉(cāng)庫(kù)。大多數(shù)情況下這個(gè)優(yōu)化時(shí)非常有用的,并且只要你遵循這個(gè)規(guī)范就不會(huì)引起問題: 修訂本從不變更。除性能之外,還有幾個(gè)好的原因來遵循這個(gè)原則。

              無論如何,取決于你當(dāng)前的構(gòu)建系統(tǒng)和你的依賴管理策略,你可能更愿意更新你的模塊。有兩種變更需要考慮:


              2.1) 模塊元數(shù)據(jù)變更

              模塊提供者不考慮經(jīng)常優(yōu)化模塊元數(shù)據(jù),他們更多的關(guān)注他們的api或者行為(如果他們甚至提供模塊元數(shù)據(jù))。我們不喜歡的事情經(jīng)常發(fā)生:我們不得不更新模塊元數(shù)據(jù),一個(gè)依賴被遺忘了,或者另一個(gè)丟失了......

              在這種情況下,在你的依賴解析器上設(shè)置checkModified為"true"將是一個(gè)解決方案。這個(gè)標(biāo)記告訴ivy需要檢查模塊的元數(shù)據(jù)相比較緩存是否被修改. ivy首先檢查倉(cāng)庫(kù)中元數(shù)據(jù)的最后修改時(shí)間以決定只在必要時(shí)下載它,同樣只在需要時(shí)更新它。


              2.2) 制品變更

              一些用戶,尤其是從maven2過來的用戶,喜歡使用一個(gè)特別的修訂版本來處理經(jīng)常變更的模塊。在maven2中這個(gè)通常被稱為SNAPSHOT(快照)版本,并且有一種主張認(rèn)為這樣可以幫助節(jié)約空間,因?yàn)橹恍枰獮殚_發(fā)時(shí)可能創(chuàng)建的大量的中間產(chǎn)物保留一個(gè)修訂版本。

              ivy使用"changing revision"的概念來支持這種方法。changing revision就是這樣:一個(gè)ivy認(rèn)為隨著時(shí)間推移始終可能變更的修訂版本.為了處理這個(gè),可以通過使用以來標(biāo)簽明確指定一個(gè)依賴為可以變更,或者在解析器上使用changingPattern 和changingMatcher 屬性來知名那個(gè)修訂版本或者修訂版本組可以被認(rèn)為是變更的。

              一旦ivy知道一個(gè)修訂版本是變更的,它將遵循這樣的原則來避免過于頻繁的檢查倉(cāng)庫(kù):如果模塊的元數(shù)據(jù)沒有修改,它將認(rèn)為整個(gè)模塊(包括制品)沒有修改。即使如果模塊描述符文件已經(jīng)修改,它將檢查模塊的發(fā)行數(shù)據(jù)來看這個(gè)是不是同一個(gè)修訂版本的一個(gè)新的發(fā)行。然后如果發(fā)行數(shù)據(jù)被修改了,它將檢查制品的最后修改時(shí)間戳,并相應(yīng)的下載它們。

              因此如果你想使用變更修訂版本,使用發(fā)布任務(wù)來發(fā)布你的模塊,請(qǐng)小心更新發(fā)布數(shù)據(jù),然后一切都會(huì)工作的很好。并且記住也要將你的解析器設(shè)置checkModified=true"。


          十三. 路徑處理

              作為一個(gè)依賴管理器,ivy有一系列的文件相關(guān)操作,大部分使用路徑或者路徑模式來在文件系統(tǒng)上定位文件。

              這些路徑可以明確是的相對(duì)路徑或者絕對(duì)路徑。我們推薦經(jīng)常使用絕對(duì)路徑,這樣你不必?fù)?dān)心你的相對(duì)路徑的基準(zhǔn)路徑是什么。ivy提供一些變量,可以被用來作為你的絕對(duì)路徑的基準(zhǔn)路徑。例如,ivy有基準(zhǔn)路徑的概念,這個(gè)基本和ant一致。你可以使用變量ivy.basedir來訪問這個(gè)基準(zhǔn)目錄。因此如果你有類似這樣的路徑:

          ${ivy.basedir}/ivy.xml

              你就得到了一個(gè)絕對(duì)路徑。在設(shè)置文件中,你同樣有一個(gè)名為ivy.settings.dir的變量指向你的設(shè)置文件所在的目錄,這使得定義和這個(gè)目錄相關(guān)的路徑變得非常容易。

              如果你真的想使用相對(duì)路徑,被用于實(shí)際定位文件的基準(zhǔn)路徑取決于相對(duì)路徑在哪里被定義:

              * 在ivy文件中,路徑是相對(duì)于ivy文件自身(在ivy文件中唯一可能的路徑是用于配置包含申明)。
              * 在設(shè)置文件中,用于文件包含的路徑(也就是屬性文件裝載和設(shè)置文件包含)是相對(duì)于設(shè)置文件所在的目錄。所有其他路徑除非明確記錄否則必須是絕對(duì)路徑。
              * 在ivy的ant任務(wù)和ivy參數(shù)或選項(xiàng)中,路徑是相對(duì)于ivy基準(zhǔn)路徑的,當(dāng)在ant中調(diào)用時(shí)這個(gè)路徑就是ant的basedir路徑一致。

          posted on 2009-07-06 08:28 sky ao 閱讀(1743) 評(píng)論(2)  編輯  收藏 所屬分類: project building

          評(píng)論

          # re: 初學(xué)Ivy(4)-主要概念(下) 2009-07-06 10:55 凡客成品哦

          good!!  回復(fù)  更多評(píng)論   

          # re: 初學(xué)Ivy(4)-主要概念(下) 2009-07-07 11:31 凡客誠(chéng)品

          而在回收了舊空調(diào)后獲得的  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 凤庆县| 屯昌县| 晋州市| 廉江市| 莒南县| 尖扎县| 柳河县| 铜陵市| 屏边| 城步| 宁都县| 长春市| 巴彦淖尔市| 惠安县| 平阴县| 滨海县| 榆树市| 三都| 邛崃市| 政和县| 阿巴嘎旗| 汉阴县| 奉节县| 锡林郭勒盟| 凉山| 平顶山市| 镇沅| 德州市| 亚东县| 上饶县| 兴仁县| 繁昌县| 邵东县| 新宾| 海城市| 邵武市| 周宁县| 苍南县| 闽清县| 海淀区| 海原县|