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

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

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

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統計

    其他鏈接

    友情鏈接

    最新評論

    ivy教程(11)-架設倉庫(3)-使用命名空間

        現在你已經看到從一個已經存在的倉庫創建你自己的倉庫是如何的簡單,你可能會想知道如何處理更加復雜的情況,例如當源倉庫和目的地倉庫不遵循相同的命名約定。

        1) 通往專業倉庫之路

        我們將學習這個如何構建一個專業倉庫的章節。什么是專業倉庫?我們的觀點是一個良好質量的倉庫必須遵循有關項目命名的清晰的規則,并必須提供正確,可用,可配置和驗證過的項目描述符。為了達到這些目標,我們認為你必須構建你自己的倉庫。

        在前面的例子里面我們已經看到,我們可以使用一些公共倉庫看來開始構建我們自己的倉庫。然而,結果并不總是那么理想, 尤其是關系到使用的命名規則。 

        當你有一個已經存在的倉庫并且希望從大量的不遵循相同的命名轉換的公共倉庫中獲益時,這個問題非常常見。或者僅僅是因為你發現你作為基礎使用的倉庫不夠一直- 為什么所有的apache commons模塊不適用org.apache.commons 組織? 歷史原因。但是如果你安裝你自己的倉庫,你可能不想從歷史中蒙受損失。

        幸運的是,對于這種問題ivy有一種非常強大的答復:namespaces.

        2) 使用命名空間
        當你查看前面教程構建的倉庫時,你將清晰的看到我們正在談論的東西:所有apache commons模塊使用它們自己的名字作為組織。

        因此讓我們看一下通過使用namespaces ivy可以做什么(稍后我們將深入細節):

    Z:\>ant commons-lang-1-0-ibiblio-with-namespace
    Buildfile: build.xml

    load-ivy:

    init-ivy:

    maven2-namespace:
    [ivy:install] :: loading settings :: url = jar:file://home/xavier/.ivy2/jars/ivy.jar!/org/apache/ivy/core/settings/ivysettings.xml
    [ivy:install] :: Ivy 2.0.0-beta1-local-20071130005044 - 20071130005044 :: http://ant.apache.org/ivy/ ::
    :: loading settings :: file = /home/xavier/ivy/settings/ivysettings-advanced.xml
    [ivy:install] :: installing apache#commons-lang;1.0 ::
    [ivy:install] :: resolving dependencies ::
    [ivy:install]   found apache#commons-lang;1.0 in libraries
    [ivy:install] :: downloading artifacts to cache ::
    [ivy:install] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/1.0/commons-lang-1.0.jar ...
    [ivy:install] ........ (62kB)
    [ivy:install] .. (0kB)
    [ivy:install]   [SUCCESSFUL ] apache#commons-lang;1.0/commons-lang.jar[jar] (1612ms)
    [ivy:install] :: installing in my-repository ::
    [ivy:install]   published commons-lang to /home/xavier/ivy/myrepository/advanced/apache/commons-lang/jars/commons-lang-1.0.jar
    [ivy:install]   published ivy to /home/xavier/ivy/myrepository/advanced/apache/commons-lang/ivys/ivy-1.0.xml
    [ivy:install] :: install resolution report ::
            ---------------------------------------------------------------------
            |                  |            modules            ||   artifacts   |
            |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
            ---------------------------------------------------------------------
            |      default     |   1   |   1   |   0   |   0   ||   1   |   1   |
            ---------------------------------------------------------------------

    BUILD SUCCESSFUL
    Total time: 3 seconds

        現在我們看一下我們的倉庫,它看上去很好。

    Z:\>dir /s /B /A:-D myrepository\advanced
    Z:\myrepository\advanced\apache\commons-lang\ivys\ivy-1.0.xml
    Z:\myrepository\advanced\apache\commons-lang\ivys\ivy-1.0.xml.md5
    Z:\myrepository\advanced\apache\commons-lang\ivys\ivy-1.0.xml.sha1
    Z:\myrepository\advanced\apache\commons-lang\jars\commons-lang-1.0.jar
    Z:\myrepository\advanced\apache\commons-lang\jars\commons-lang-1.0.jar.md5
    Z:\myrepository\advanced\apache\commons-lang\jars\commons-lang-1.0.jar.sha1

        我們甚至可以看一下我們倉庫中的commons-lang ivy文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <ivy-module version="1.0">
        
    <info organisation="apache"
            module
    ="commons-lang"
            revision
    ="1.0"
            status
    ="integration"
            publication
    ="20051124062021"
            namespace
    ="ibiblio-maven2"
        
    />
    ......

        很好,我們看到組織現在是'apache'。但是ivy是從哪里獲得這個的呢?

        1. 這是如何工作的?

        實際上ivy和以往一樣使用同樣的倉庫作為源倉庫,僅僅有一點不同:namespace參數。

    <ibiblio    name="libraries"
        root
    ="${ibiblio-maven2-root}"
        m2compatible
    ="true"
        namespace
    ="maven2"
    />

        namespace由一系列規則定義而成。這些規則基于正則表達式,并告訴ivy如何從倉庫命名空間轉換數據到系統命名空間,換言之,ivy時常運行的命名空間(例如ivy 緩存通常使用系統命名空間).

        對于我們調用maven2的命名空間,我們已經定義了一些規則,這里是一個:

        處理導入apache maven1項目的規則

    <rule>    <!-- imported apache maven1 projects -->
        
    <fromsystem>
            
    <src org="apache" module=".+"/>
           
            
    <dest org="$m0" module="$m0"/>
        
    </fromsystem>
        
    <tosystem>
            
    <src org="commons-.+" module="commons-.+" />
            
    <src org="ant.*" module="ant.*" />
            ...
            
    <src org="xmlrpc" module="xmlrpc" />

            
    <dest org="apache" module="$m0"/>
        
    </tosystem>
    </rule>

        理解命名空間:

        (1) fromsystem : 在這里我們定義,在系統命名空間中以組織"apache"定義的項目被轉換為目的地命名空間中使用模塊名為組織的項目,無論修訂版本是什么.例如,系統命名空間中的項目apache#commons-lang;1.0獎被轉換為maven2解析器命名空間中的commons-lang#commons-lang;1.0。

        (2) tosystem : 在這里我們定義反向映射,換言之從maven2倉庫轉換apache項目到系統命名空間的apache項目。這里使用的規則告訴說所有組織名匹配commons-.+ (把它看成java正則表達式)項目被轉換為組織是apache而模塊名還是原來的項目。同樣的規則被使用到其他apache項目例如ant等等。

        注意正則表達式的用法:為了識別在組織,模塊和修訂版本中找到的正則表達式, 使用的表示法用字母'o', 'm' 和'r'作為匹配的正則表達式的前綴。
    $o0 : 在組織屬性中完全匹配的值
    $o1 : 在組織屬性中標記的第一個匹配的語法分組
    ...
    同樣應用在模塊中: $m0, $m1, ...
    也用于修訂版本 : $r0, $r1, ...

        好了,現在你知道命名空間背后的想法了,現在你可以檢查例子中提供的整個命名空間的設置,并使用命名空間測試模塊和它的依賴的安裝。

        運行
    ant maven2-namespace-deps

        然后你將看到結果倉庫比我們第一次構件的清晰了。

        從我們的經驗來看,創建命名空間的花費是值得的,如果你經常需要在你自己的倉庫中,這里命名規則已經存在或者更加嚴格,為第三方類庫增加新的模塊或者修訂版本。


    posted on 2009-10-09 21:04 sky ao 閱讀(1661) 評論(0)  編輯  收藏 所屬分類: project building

    主站蜘蛛池模板: 精品国产亚洲男女在线线电影 | 天天影视色香欲综合免费| 成人网站免费大全日韩国产| 羞羞视频免费网站日本| 黄色三级三级三级免费看| aa毛片免费全部播放完整| 99精品视频在线观看免费播放 | 国产大片免费观看中文字幕| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 国产男女猛烈无遮档免费视频网站 | 无码一区二区三区AV免费| 伊人久久亚洲综合影院| 久久久久亚洲精品美女| 亚洲成a人片7777| 美女黄色免费网站| 亚洲精品高清在线| 99久久婷婷国产综合亚洲| 成人网站免费大全日韩国产| 亚洲爆乳精品无码一区二区三区 | 国产成人精品日本亚洲专区 | 亚洲日韩国产一区二区三区在线| 两个人看www免费视频| 国产福利免费观看| 国产成人高清精品免费观看| 免费无码不卡视频在线观看| 亚洲精品V欧洲精品V日韩精品| 亚洲女子高潮不断爆白浆| 日本免费一本天堂在线| 亚洲成a人片毛片在线| 好男人视频社区精品免费| 亚洲视频一区二区在线观看| 人妻巨大乳hd免费看| 亚洲av无码国产精品色午夜字幕| 四虎在线免费视频| 激情小说亚洲色图| 免费av欧美国产在钱| 亚洲视频小说图片| 最新69国产成人精品免费视频动漫| 一级做a免费视频观看网站| 四虎影院永久免费观看| 四虎必出精品亚洲高清|