<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統計

    其他鏈接

    友情鏈接

    最新評論

    ivy教程(6)-項目依賴

        這個示例將舉例說明在兩個項目之間的依賴。

        depender項目聲明它使用dependee 項目。我們將闡明兩個事情:

        * 被獨立的項目聲明的公共類庫將被依賴的項目自動獲取
        * depender項目將獲取dependee項目的"最新"版本

        1) 使用到的項目

        1. dependee
        dependee項目非常簡單。它依賴apache類庫commons-lang并只包含一個類: standalone.Main : standalone.Main提供兩個服務:

        * 返回項目的版本
        * 使用org.apache.commons.lang.WordUtils.capitalizeFully大寫一個字符串

        這里是項目的內容:

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

        看一下ivy.xml文件:

    <ivy-module version="1.0">
        
    <info organisation="org.apache" module="dependee"/>
        
    <dependencies>
            
    <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
        
    </dependencies>
    </ivy-module>

        ivy依賴文件只聲明了一個依賴apache commons-lang類庫。

        2) depender
        項目depender也非常簡單。它僅僅聲明了一個對dependee項目的最新版本的依賴,而它僅僅包含一個類depending.Main,干了兩件事情:

        * 通過對 standalone.Main.getVersion() 的調用獲取獨立項目的版本。
        * 通過對standalone.Main.capitalizeWords(str)的調用轉換字符串

        看一下ivy.xml文件:

    <ivy-module version="1.0">
        
    <info organisation="org.apache" module="depender"/>
        
    <dependencies>
            
    <dependency name="dependee" rev="latest.integration" />
        
    </dependencies>
    </ivy-module>

        2) 設置

        ivy設置在settings目錄下,包含兩個文件:

        * ivysettings.properties: 屬性文件
        * ivysettings.xml: 包含設置的文件

        讓我們看一下ivysettings.xml文件:

    <ivysettings>
        
    <properties file="${ivy.settings.dir}/ivysettings.properties"/>
        
    <settings defaultCache="${ivy.settings.dir}/ivy-cache" defaultResolver="libraries"/>
        
    <resolvers>
            
    <filesystem name="projects">
                
    <artifact pattern="${repository.dir}/[artifact]-[revision].[ext]" />
                
    <ivy pattern="${repository.dir}/[module]-[revision].xml" />
            
    </filesystem>
            
    <ibiblio name="libraries" m2compatible="true" usepoms="false" />
        
    </resolvers>
        
    <modules>
            
    <module organisation="org.apache" name="dependee" resolver="projects"/>
        
    </modules>
    </ivysettings>

        文件包含四個主要標簽:properties, settings, resolvers 和 modules.

        1. properties
        這個標簽僅僅如ant所做的那樣為ivy程序裝載一些屬性。

        2. settings
        這個標簽負責初始化一些為ivy程序使用的參數。ivy用于緩存制品的目錄將是包含vysettings.xml文件的目錄自身的名為ivy-cache的子目錄。
        第二個參數,告訴ivy使用一個名為"libraries"的解析器作為默認解析器。更多的信息可以再設置參考文檔中找到。

        3. resolvers
        這個標簽定義要使用的解析器。這里我們有兩個定義要的解析器:"projects" 和 "libraries".
        名為"projects"的文件系統解析器可以通過在本地文件系統中定位依賴來解析內部依賴。
        名為"libraries"的ibiblio解析器用于查找在maven2 倉庫內的依賴,但是不使用maven poms。

        4. modules
        modules標簽容許配置用哪個解析器來解析哪個依賴。這個實際上只對應于一個模塊,但是可以使用正則表達式,或者其他類型的表達式(如glob 表達式)。

        對于其他模塊(例如所有不是org.apache#dependee的模塊),因為這里沒有特別設置,將使用默認解析器: "libraries".

        3) walkthrough

        step 1 : 準備
        打開一個dos或者shell窗口,并進入"src/example/dependence"目錄

        step 2 : 清理
        在提示符下: ant
        這將清理整個項目目錄樹(已編譯的類和獲得的libs)和ivy緩存。你可以再每次你想清理這個例子時做這個事情。

        step 3 : 發布dependee項目
        進入depende目錄,并發布項目

    I:\dependee>ant publish
    Buildfile: src\example\dependence\standalone\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\dependence\config\ivysettings.xml
    [ivy:retrieve] :: resolving dependencies :: [ org.apache 
    | standalone | working@BEN-ScokartG ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     found [ commons
    -lang | commons-lang | 2.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] (5388ms)
    [ivy:retrieve] :: resolution report ::
        
    ---------------------------------------------------------------------
        
    |                  |            modules            ||   artifacts   |
        
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        
    ---------------------------------------------------------------------
        
    |      default     |   1   |   1   |   0   |   0   ||   1   |   1   |
        
    ---------------------------------------------------------------------
    [ivy:retrieve] :: retrieving :: [ org.apache 
    | standalone ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     
    1 artifacts copied, 0 already retrieved

    compile:
        [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\classes
        [javac] Compiling 
    1 source file to C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\classes

    jar:
    [propertyfile] Creating 
    new property file: C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\classes\version.properties
          [jar] Building jar: C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\standalone.jar

    publish:
    [ivy:publish] :: delivering :: [ org.apache 
    | standalone | working@BEN-ScokartG ] :: 1 :: release :: Sun Nov 04 20:50:24 CET 2007
    [ivy:publish]     delivering ivy file to C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone
    /build/ivy.xml
    [ivy:publish] :: publishing :: [ org.apache 
    | standalone ]
    [ivy:publish]     published standalone to C:\dev\data\opensource_workspace\ivy\src\example\dependence\config
    /repository/standalone-1.jar
    [ivy:publish]     published ivy to C:\dev\data\opensource_workspace\ivy\src\example\dependence\config
    /repository/standalone-1.xml
         [echo] project standalone released with version 
    1

    BUILD SUCCESSFUL
    Total time: 
    11 seconds

        這里我們可以看到:

        * 項目依賴1個類型(1個制品)
        * 這個類庫不再ivy緩存中并且因此被下載 (1 downloaded)
        * 這個項目被發行,版本號為1

        給了給出關于publish的更多的解析,如你所見publish任務的調用導致了兩個主要事情:

        * 交付被解析的ivy文件到build/ivy.xml

          這個被完成時因為默認publish任務不僅僅發行制品們而且也發行ivy文件。因此它查看ivy文件應該被發行到的路徑,使用artifactspattern: ${build.dir}/[artifact].[ext].
          對于一個ivy文件,這將解析到build/ivy.xml。因為這個文件不存在,它自動調用deliver任務交付一個被解析的ivy文件到這個目的地。

        * 制品dependee的發行和ivy文件到倉庫

        都僅僅是在當前項目中找到的文件拷貝,更明確的在build目錄中。這是因為artifactspattern 被設置為${build.dir}/[artifact].[ext],因此dependee 制品分布在build/dependee.jar而ivy文件在build/ivy.xml. 并且因為我們要求publish任務使用"projects"解析器發行他們,這些文件被復制到repository\dependee-1.jar 和 repository\dependee-1.xml,遵守我們設置中的artifact和ivy模式。
        
        step 4: 運行depender
        進入depender目錄并運行ant

    I:\depender>ant
    Buildfile: src\example\dependence\depending\build.xml

    clean:

    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\dependence\config\ivysettings.xml
    [ivy:retrieve] :: resolving dependencies :: [ org.apache 
    | depending | working@BEN-ScokartG ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     found [ org.apache 
    | standalone | 1 ] in projects
    [ivy:retrieve]     [
    1] [ org.apache | standalone | latest.integration ]
    [ivy:retrieve]     found [ commons
    -lang | commons-lang | 2.0 ] in libraries
    [ivy:retrieve] downloading C:\dev\data\opensource_workspace\ivy\src\example\dependence\config\repository\standalone
    -1.jar ...
    [ivy:retrieve] .. (1kB)
    [ivy:retrieve] .. (0kB)
    [ivy:retrieve]     [SUCCESSFUL ] [ org.apache 
    | standalone | 1 ]/standalone.jar[jar] (20ms)
    [ivy:retrieve] :: resolution report ::
        
    ---------------------------------------------------------------------
        
    |                  |            modules            ||   artifacts   |
        
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        
    ---------------------------------------------------------------------
        
    |      default     |   2   |   1   |   0   |   0   ||   2   |   1   |
        
    ---------------------------------------------------------------------
    [ivy:retrieve] :: retrieving :: [ org.apache 
    | depending ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     
    2 artifacts copied, 0 already retrieved

    compile:
        [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\dependence\depending\build\classes
        [javac] Compiling 
    1 source file to C:\dev\data\opensource_workspace\ivy\src\example\dependence\depending\build\classes

    run:
         [java] you are using version 
    1 of class standalone.Main
         [java] standard message : i am depending.Main and standalone.Main will 
    do the job for me
         [java]     [standalone.Main] capitalizing string 
    "i am depending.Main and standalone.Main will do the job for me" using org.apache.commons.lang.WordUtils
         [java] capitalized message : I Am Depending.main And Standalone.main Will Do The Job For Me

    BUILD SUCCESSFUL
    Total time: 
    3 seconds

        這里我們看到:

        * 項目依賴2個類庫(2個制品)
        * 類庫中的一個在緩存中因為僅有一個被下載(1 downloaded)
        * ivy得到項目dependee的版本1. 對standalone.Main.getVersion()的調用返回1.如果你查看depender/lib目錄,你將看到dependee-1.jar,這是項目dependee的版本1的制品。
        * 對standalone.Main.capitalizeWords(str)的調用成功,這意味著在classpath中有需要的類庫。如果你查看lib目錄,你將看到類庫commons-lang-2.0.jar已經被獲取。這個類庫是項目"dependee"聲明要使用的,因此ivy同樣為了depender項目而獲得它。

    step 5: dependee 項目的新版本
        和我們在步驟3中做的類型,再次發行dependee項目。這將導致這個項目的新版本。


        現在如果你查看你的倉庫文件夾,你將發現dependee項目發行的2個版本。
        讓我們看這個:

    I:\dependee>ant publish
    Buildfile: src\example\dependence\standalone\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\dependence\config\ivysettings.xml
    [ivy:retrieve] :: resolving dependencies :: [ org.apache 
    | standalone | working@BEN-ScokartG ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     found [ commons
    -lang | commons-lang | 2.0 ] in libraries
    [ivy:retrieve] :: resolution report ::
        
    ---------------------------------------------------------------------
        
    |                  |            modules            ||   artifacts   |
        
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        
    ---------------------------------------------------------------------
        
    |      default     |   1   |   0   |   0   |   0   ||   1   |   0   |
        
    ---------------------------------------------------------------------
    [ivy:retrieve] :: retrieving :: [ org.apache 
    | standalone ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     
    0 artifacts copied, 1 already retrieved

    compile:

    jar:
    [propertyfile] Updating property file: C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\classes\version.properties
          [jar] Building jar: C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\standalone.jar

    publish:
       [delete] Deleting: C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone\build\ivy.xml
    [ivy:publish] :: delivering :: [ org.apache 
    | standalone | working@BEN-ScokartG ] :: 2 :: release :: Sun Nov 04 20:50:33 CET 2007
    [ivy:publish]     delivering ivy file to C:\dev\data\opensource_workspace\ivy\src\example\dependence\standalone
    /build/ivy.xml
    [ivy:publish] :: publishing :: [ org.apache 
    | standalone ]
    [ivy:publish]     published standalone to C:\dev\data\opensource_workspace\ivy\src\example\dependence\config
    /repository/standalone-2.jar
    [ivy:publish]     published ivy to C:\dev\data\opensource_workspace\ivy\src\example\dependence\config
    /repository/standalone-2.xml
         [echo] project standalone released with version 
    2

    BUILD SUCCESSFUL
    Total time: 
    2 seconds

        好,現在我們的倉庫包含了dependee項目的2個版本,其他項目可以關聯到任何版本。

    I:\dependee>dir ..\settings\repository /w

    [.]                [..]               dependee
    -1.jar   dependee-1.xml   dependee-2.jar   dependee-2.xml

    I:\dependee
    >

        step 6: 在depender項目中獲取新版本

        再次運行depender項目時我們會期望什么?有兩個主要事情:

        * 獲得項目dependee的版本2作為latest.integration 版本
        * 運行測試必須顯示項目dependee的版本為2

        讓我們試試吧!

    I:\depender>ant
    Buildfile: src\example\dependence\depending\build.xml

    clean:
       [delete] Deleting 
    3 files from C:\dev\data\opensource_workspace\ivy\src\example\dependence\depending
       [delete] Deleted 
    4 directories from C:\dev\data\opensource_workspace\ivy\src\example\dependence\depending

    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\dependence\config\ivysettings.xml
    [ivy:retrieve] :: resolving dependencies :: [ org.apache 
    | depending | working@BEN-ScokartG ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     found [ org.apache 
    | standalone | 2 ] in projects
    [ivy:retrieve]     [
    2] [ org.apache | standalone | latest.integration ]
    [ivy:retrieve]     found [ commons
    -lang | commons-lang | 2.0 ] in libraries
    [ivy:retrieve] downloading C:\dev\data\opensource_workspace\ivy\src\example\dependence\config\repository\standalone
    -2.jar ...
    [ivy:retrieve] .. (1kB)
    [ivy:retrieve] .. (0kB)
    [ivy:retrieve]     [SUCCESSFUL ] [ org.apache 
    | standalone | 2 ]/standalone.jar[jar] (100ms)
    [ivy:retrieve] :: resolution report ::
        
    ---------------------------------------------------------------------
        
    |                  |            modules            ||   artifacts   |
        
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        
    ---------------------------------------------------------------------
        
    |      default     |   2   |   1   |   0   |   0   ||   2   |   1   |
        
    ---------------------------------------------------------------------
    [ivy:retrieve] :: retrieving :: [ org.apache 
    | depending ]
    [ivy:retrieve]     confs: [
    default]
    [ivy:retrieve]     
    2 artifacts copied, 0 already retrieved

    compile:
        [mkdir] Created dir: C:\dev\data\opensource_workspace\ivy\src\example\dependence\depending\build\classes
        [javac] Compiling 
    1 source file to C:\dev\data\opensource_workspace\ivy\src\example\dependence\depending\build\classes

    run:
         [java] you are using version 
    2 of class standalone.Main
         [java] standard message : i am depending.Main and standalone.Main will 
    do the job for me
         [java]     [standalone.Main] capitalizing string 
    "i am depending.Main and standalone.Main will do the job for me" using org.apache.commons.lang.WordUtils
         [java] capitalized message : I Am Depending.main And Standalone.main Will Do The Job For Me

    BUILD SUCCESSFUL
    Total time: 
    5 seconds

        很好,我們得到了期望的結果,run target展示我們正在使用項目dependee的main類的版本2.如果我們看一下resolve target的結果,我們可以看到一個制品從ivy緩存中被下載。實際上這個文件就是從倉庫中得到的項目dependee的版本2,你現在可以在ivy-cache目錄中得到它。

    posted on 2009-09-29 23:32 sky ao 閱讀(2820) 評論(0)  編輯  收藏 所屬分類: project building

    主站蜘蛛池模板: av片在线观看永久免费| 久久久久亚洲国产AV麻豆| 国产免费无码一区二区| 亚洲 综合 国产 欧洲 丝袜 | 美女裸体无遮挡免费视频网站| 无人在线直播免费观看| 亚洲av极品无码专区在线观看| 最近2019中文免费字幕在线观看 | 真实乱视频国产免费观看| 亚洲综合一区无码精品| 97无码免费人妻超级碰碰夜夜| 亚洲人成7777影视在线观看| 中字幕视频在线永久在线观看免费| 亚洲伊人久久大香线蕉影院| 99视频在线精品免费观看6| 亚洲欧美日韩一区二区三区在线| 永久免费av无码网站韩国毛片| 亚洲人成77777在线观看网| 黄a大片av永久免费| 国产精品小视频免费无限app| 亚洲人成网77777亚洲色| 足恋玩丝袜脚视频免费网站| 亚洲日韩一区精品射精| 亚洲最大激情中文字幕| 69免费视频大片| 美女扒开尿口给男人爽免费视频| 2022中文字字幕久亚洲| 国产精品入口麻豆免费观看| 另类图片亚洲校园小说区| 国产亚洲大尺度无码无码专线 | 国产精品免费播放| 小日子的在线观看免费| 亚洲精品无码不卡在线播放| 亚洲精品一品区二品区三品区| 国产精品成人观看视频免费| 国产精品内射视频免费| 亚洲欧美日韩综合俺去了| 亚洲大尺度无码专区尤物| 四虎永久成人免费| 免费观看AV片在线播放| 久9久9精品免费观看|