Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          ivy教程(4)-多解析器


              這個例子演示模塊是如何被多解析器獲得的。使用多解析器在很多情況下是非常有用的,這里是一些例子:

              * 來自發行的單獨的集成構建
              * 為第三方模塊使用公共倉庫并且為內部模塊使用私有倉庫
              * 使用一個倉庫來存儲那些在無法管理的公共倉庫里里面的不清晰的模塊
              * 使用本地倉庫來暴露在一個開發人員的位置上生成的構建

              在ivy中,多解析器的使用是通過一個名為解析器鏈的復合解析器來支持的。

              在我們的例子中,我們將簡單的展示如何使用兩個解析器,一個在本地倉庫而另一個使用maven2倉庫。

              1)  項目描述

              1. 項目: chained-resolvers

              項目非常簡單,只包含一個簡單的類: example.Hello.

              它依賴兩個類庫:Apache commons-lang 和一個小的test類庫(源文件被包含在jar文件中).test類庫被項目使用用于將字符串轉換為大寫,而commons-lang用來以大些書寫同樣的字符串。

              這是項目的內容:

              * build.xml: 項目的ant 構建文件
              * ivy.xml: ivy項目文件
              * src\example\Hello.java: 項目僅有的一個類

              讓我們看一下ivy.xm文件:
          <ivy-module version="1.0">
              
          <info organisation="org.apache" module="chained-resolvers"/>
              
          <dependencies>
                  
          <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
                  
          <dependency name="test" rev="1.0"/>
              
          </dependencies>
          </ivy-module>

              和我們期望的一樣,ivy文件聲明依賴于兩個項目使用的依賴:commons-lang 和 test.注意我們沒有指定test依賴的組織,在這種情況下ivy假定為和聲明的模塊同樣的組織,換句話說,在這個案例中是org.apache。

              2. ivy設置

              ivy設置在設置目錄中生成,它只包含一個文件: ivysettings.xml.
          <ivysettings>
            
          <settings defaultResolver="chain-example"/>
            
          <resolvers>
              
          <chain name="chain-example">
                
          <filesystem name="libraries">
                  
          <artifact pattern="${ivy.settings.dir}/repository/[artifact]-[revision].[ext]" />
                
          </filesystem>
                
          <ibiblio name="ibiblio" m2compatible="true" />
              
          </chain>
            
          </resolvers>
          </ivysettings>

              3. 設置標簽
              這個標簽用一些參數初始化ivy.這里只使用了一個,默認使用的解析器的名稱。

              4. 解析器標簽

              在這個標簽下,我們可以找到ivy將使用的解析器的描述。在我們的例子中,我們僅使用一個解析器,稱為"chain-example",它非常特殊在于它定義了一個解析器列表(或言之鏈)。
              放在在鏈中的解析器有:

              * libraries : 這是一個文件解析器。這個解析器被配置為在包含ivysettings.xml文件的目錄下的"repository"子目錄查找制品。
              * ibiblio : 這個解析器很特殊。它查找ibiblio maven倉庫來獲取類庫。

              就這樣,我們配置好了解析器鏈。

              2) walkthrough
              步驟 1: 準備
              打開一個dos或者shell串口,并進入"chained-resolvers"目錄。

              步驟 2: 清理目錄樹
              在提示符下: ant

              這將清理完整的項目目錄樹和ivy緩存。每次你想清理這個例子的時候你都可以這樣做。
              在幾乎所有的例子中,我們提供clean target作為默認的target。既然大部分例子使用相同的ivy緩存,每次你調用這個target時你將清理這個ivy緩存。
              清理ivy緩存通常你可以放心的做(除了性能外):它僅僅是緩存,所有的東西都可以從倉庫中再次獲得。對于從maven2過來的人來說,這聽起來有點奇怪,但是記住在ivy中,緩存不是本地倉庫,東西被隔離地保持干凈。

              步驟 3: 運行項目
              進入chainedresolvers-project目錄,并簡單運行ant。
          I:\chained-resolvers\chainedresolvers-project>ant
          Buildfile: src\example\chained-resolvers\chainedresolvers-project\build.xml

          resolve:
          [ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 :: http://ant.apache.org/ivy/ ::
          [ivy:retrieve] :: loading settings :: file = C:\dev\data\opensource_workspace\ivy\src\example\chained-resolvers\config\ivysettings.xml
          [ivy:retrieve] :: resolving dependencies :: [ org.apache | chained-resolvers | working@BEN-ScokartG ]
          [ivy:retrieve]     confs: [default]
          [ivy:retrieve]     found [ commons-lang | commons-lang | 2.0 ] in ibiblio
          [ivy:retrieve]     found [ org.apache | test | 1.0 ] in libraries
          [ivy:retrieve] downloading http://www.ibiblio.org/maven/commons-lang/jars/commons-lang-2.0.jar...
          [ivy:retrieve]  ............................................................................................
          [ivy:retrieve] 
          ............................................................................................(165kB)
          [ivy:retrieve] .. (0kB)
          [ivy:retrieve]     [SUCCESSFUL ] [ commons-lang | commons-lang | 2.0 ]/commons-lang.jar[jar] (5928ms)
          [ivy:retrieve] downloading C:\dev\data\opensource_workspace\ivy\src\example\chained-resolvers\config\repository\test-1.0.jar...
          [ivy:retrieve] .. (1kB)
          [ivy:retrieve]     [SUCCESSFUL ] [ org.apache | test | 1.0 ]/test.jar[jar] (10ms)
          [ivy:retrieve] :: resolution report ::
              ---------------------------------------------------------------------
              |                  |            modules            ||   artifacts   |
              |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
              ---------------------------------------------------------------------
              |      default     |   2   |   2   |   0   |   0   ||   2   |   2   |
              ---------------------------------------------------------------------
          [ivy:retrieve] :: retrieving :: [ org.apache | chained-resolvers ]
          [ivy:retrieve]     confs: [default]
          [ivy:retrieve]     2 artifacts copied, 0 already retrieved

          run:
              [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\chained-resolvers\chainedresolvers-project\build
              [javac] Compiling 1 source file to C:\dev\data\opensource_workspace\ivy\src\example\chained-resolvers\chainedresolvers-project\build
               [java] standard message :example world !
               [java] capitalized by org.apache.commons.lang.WordUtils : Example World !
               [java] upperCased by test.StringUtils : EXAMPLE WORLD !

          BUILD SUCCESSFUL
          Total time: 12 seconds


              我們能看到在resolve任務的日志中,兩個依賴被獲取(2個制品)并被復制到ivy緩存目錄(2個下載)。

              run target成功地使用了來自ibiblio倉庫的commons-lang.jar和來自本地倉庫中的test.jar

              3) 更進一步

              這個非常簡單的例子有助于看到如何對在一個鏈中的兩個解析器進行基本的設置。對于那些想知道這個解析器提供的所有特性的人,可以查看鏈解析器的參考文檔。

              從這個基本的例子中尼可以得到的最有趣的事情是:

              * 鏈并不局限于兩個內嵌解析器,你可以使用任何你想要的數目。
              * 通過設置returnFirst="true",你可以得到一個一旦發現給定模塊就停止的鏈。
              * 通過設置dual="true",整個完整的鏈將被用于模塊描述符和制品,而當dual="false",在鏈中找到模塊描述符(如果有任何一個)的解析器將被用于查找制品。


          posted on 2009-09-25 15:28 sky ao 閱讀(1833) 評論(0)  編輯  收藏 所屬分類: project building

          主站蜘蛛池模板: 大港区| 磐安县| 高清| 曲阜市| 商城县| 湖南省| 海伦市| 郑州市| 赤水市| 泽州县| 临安市| 宜昌市| 宜章县| 平原县| 浦县| 罗山县| 金湖县| 保康县| 淮南市| 庆元县| 林西县| 鹿泉市| 肥乡县| 镇原县| 衡山县| 徐汇区| 吐鲁番市| 阿图什市| 麻城市| 永济市| 鹿邑县| 城固县| 七台河市| 梁平县| 常州市| 济源市| 大悟县| 毕节市| 信宜市| 疏附县| 车致|