Sky's blog

          我和我追逐的夢

          常用鏈接

          統(tǒng)計(jì)

          其他鏈接

          友情鏈接

          最新評論

          ivy教程(3)-調(diào)整默認(rèn)設(shè)置


              ivy綁定一些默認(rèn)設(shè)置,這使得在通常環(huán)境下使用ivy很容易。這個(gè)教程,接近于參考文檔,解釋這些默認(rèn)設(shè)置是什么和他們怎樣調(diào)整來滿足你的需要。

              為了完整的理解設(shè)置的概念和你可以用它們做什么,我們建議閱讀其他和設(shè)置相關(guān)的教程(如Multiple ResolversDual Resolver)或者設(shè)置文件的參考文檔。

          1) 概念

              默認(rèn)設(shè)置主要是3種倉庫組成:

              * local / 私有
                用戶私有的倉庫

              * shared / 共享
                在團(tuán)隊(duì)的所有成員之間共享的倉庫。

              * public / 公共
                可以找到大部分模塊,尤其是第三方模塊的公共倉庫.

              注意如果你獨(dú)自工作,local和shared倉庫之間的差異不重要,但是需要知道如何識別它們。

              現(xiàn)在讓我們更詳細(xì)的描述這些倉庫概念的每一個(gè)。后面我們會描述如何實(shí)際配置它們。

              1. local / 私有

              當(dāng)你想做一些事情而不希望被環(huán)境中發(fā)生的其他任何事情打擾時(shí),私有倉庫非常有用。這意味著每當(dāng)ivy能夠在這個(gè)倉庫中找到模塊時(shí),這個(gè)模塊將被使用,不管其他倉庫里的是什么。

              舉例,如果你有一個(gè)模塊,聲明依賴于模塊foo的latest.integration修訂版本,然后當(dāng)foo的一個(gè)修訂版本在私有倉庫中被發(fā)現(xiàn),這個(gè)版本將被使用,即使在其他倉庫中有一個(gè)更新的修訂版本可用。

              這可能讓你們中的某些人困惑,但是想象你不得不在一個(gè)項(xiàng)目中實(shí)現(xiàn)一個(gè)新的特性,并且為了達(dá)到這個(gè)目標(biāo)你需要修改兩個(gè)模塊:你在模塊foo內(nèi)增加一個(gè)新的方法,并在模塊bar中利用。然后如果你公布模塊foo到你的私有倉庫,你可以保證在你的bar模塊中得到它,即使有其他人在shared倉庫中公布了foo的一個(gè)新的修訂版本。

              但是小心,當(dāng)你完成你的開發(fā)并且公布它到共享倉庫時(shí),你將不得不清理你的本地倉庫以便從在共享倉庫中公布的新版本中獲益。

              同樣注意,在本地倉庫中找到的模塊必須是完整的,換句話說,他們必須同時(shí)提供模塊描述符和發(fā)行的制品。

              2. shared / 共享

              如它的名字建議的,共享倉庫的目標(biāo)是在整個(gè)開發(fā)團(tuán)隊(duì)中共享。例如你可以公布你的團(tuán)隊(duì)的私有模塊,同樣你可以放置一些在公共倉庫中不能得到的模塊(例如sun的jar文件),或者僅僅是不精確(例如壞的或者不完整的模塊描述符).

              注意模塊可以在共享倉庫和公共倉庫中分隔:例如你可以在共享倉庫中有模塊的描述符而制品在公共倉庫中。

              3. public / 公共

              大多數(shù)模塊可以在公共倉庫中找到,但是某些時(shí)候缺少你要的信息。這通常是一個(gè)只能通過internet連接訪問的倉庫,雖然這不是強(qiáng)制。

          2) 安裝倉庫

              現(xiàn)在我們已經(jīng)看到三個(gè)倉庫中的每一個(gè)的目標(biāo),讓我們看怎樣安裝他們并配置以便滿足你的需求。

              首先,幾個(gè)倉庫在你的文件系統(tǒng)中使用同一個(gè)root。被作為${ivy.default.ivy.user.dir}引用,默認(rèn)為在你的user home下的.ivy2 目錄。

              注意幾個(gè)東西可以通過設(shè)置ivy變量來完成。為了不定義你自己的ivysettings.xml文件而設(shè)置他們,你可以:

              * 在任何ivy調(diào)用前,在你的構(gòu)建文件中設(shè)置一個(gè)ant屬性,如果你通過ant使用ivy
              * 設(shè)置一個(gè)環(huán)境變量,如果你通過命令行使用ivy

              舉例:
          <target name="resolve">
            
          <property name="ivy.default.ivy.user.dir" value="/path/to/ivy/user/dir"/>
            
          <ivy:resolve />
          </target>

             現(xiàn)在我們將展示如何為不同類型的倉庫覆蓋默認(rèn)值,注意你可以在下面的默認(rèn)設(shè)置的細(xì)節(jié)中發(fā)現(xiàn)這些默認(rèn)值是什么。

              1. Local

                  默認(rèn),本地倉庫位于${ivy.default.ivy.user.dir}/local.這通常是一個(gè)不錯(cuò)的地方,但是如論如何你可能需要修改它。沒有問題,你只需要設(shè)置下面的ivy變量到你想使用的目錄:
          ivy.local.default.root
              例如:
          ivy.local.default.root=/opt/ivy/repository/local

              如果你已經(jīng)有了一些你想作為你的本地倉庫來使用的東西,你可能同樣想修改這個(gè)倉庫的布局。再一次,有兩個(gè)變量可用于此:
          ivy.local.default.ivy.pattern
          給出查找ivy文件的樣式

          ivy.local.default.artifact.pattern
          給出查找制品的樣式

          例如:
          ivy.local.default.root=/opt/ivy/repository/local
          ivy.local.default.ivy.pattern=[module]/[revision]/ivy.xml
          ivy.local.default.artifact.pattern=[module]/[revision]/[artifact].[ext]

              2. Shared

              默認(rèn),本地倉庫位于${ivy.default.ivy.user.dir}/shared.如果你獨(dú)自工作沒有問題,但是共享倉庫是用來共享的!因此經(jīng)常需要修改這個(gè)目錄,并且它通常修改為指向一個(gè)網(wǎng)絡(luò)共享目錄。你可以使用:
          ivy.shared.default.root
          變量來制定一個(gè)新的目錄。此外,你也可以通過和本地倉庫類似的變量來配置布局。

          ivy.shared.default.ivy.pattern
          給出查找ivy文件的樣式

          ivy.shared.default.artifact.pattern
          給出查找制品的樣式

          例如:
          ivy.shared.default.root=/opt/ivy/repository/shared
          ivy.shared.default.ivy.pattern=[organisation]/[module]/[revision]/ivy.xml
          ivy.shared.default.artifact.pattern=[organisation]/[module]/[revision]/[artifact].[ext]

              3. Public
              默認(rèn),公共倉庫是出于m2 兼容模式下的ibiblio(換句話說,maven2的公共倉庫).

              這個(gè)倉庫的優(yōu)勢在于提供了很多模塊并且大部分的模塊都有metadata。matadata的質(zhì)量不是都很完美,但是它是一個(gè)好的開始:使用類似ivy這樣的工具并從間接依賴管理的能力中獲益。

              盡管ivy容易使用,我們建議閱讀最佳實(shí)踐來理解使用公共的、無法管理的倉庫的正面和負(fù)面。

              在1.4版本中ivy使用ivyrep作為默認(rèn)的解析器,如果你想恢復(fù)成這個(gè)方式,可以設(shè)置ivy.14.compatible=true 作為一個(gè)ant屬性。

          3) 走的更遠(yuǎn)

              好,我們已經(jīng)看到修改這三個(gè)主要倉庫的設(shè)置是很容易的。但是在web服務(wù)器上我的共享倉庫是什么?如果你不想使用maven2 倉庫作為公共的倉庫?;蛘咂渌?..

              沒有問題,ivy富有彈性并且可以用非常特殊的設(shè)置進(jìn)行配置以滿足你的需要和環(huán)境。但是在考慮你自己的設(shè)置前,我們建議閱讀后面的內(nèi)容,你將要學(xué)習(xí)如何修改默認(rèn)設(shè)置的一部分并調(diào)整其他。

              但是在解析如何做之前,你需要對ivy默認(rèn)是如何配置的有一個(gè)簡短的概述。

              默認(rèn),ivy使用被打包在ivy的jar包中的ivysettings.xml來配置。這里是設(shè)置文件:
          <ivysettings>
            
          <settings defaultResolver="default"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-public.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
          </ivysettings>

              好,這里沒有太多的信息,除了一些包含。這些包含的目的是你能夠容易的僅僅修改ivysettings的一部分而直接使用其他。例如,如果你想定義你自己的公共解析器,你將只需要像這樣通過ivysettings來配置ivy:
          <ivysettings>
            
          <settings defaultResolver="default"/>
            
          <include url="http://myserver/ivy/myivysettings-public.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
            
          <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
          </ivysettings>

              注意僅僅是ivysettings-public包含被修改為包含自產(chǎn)的公共解析器。注意同樣可以像這樣使用,感謝${ivy.default.settings.dir} 是一個(gè)變量的事實(shí),這個(gè)變量經(jīng)常設(shè)置為ivy默認(rèn)設(shè)置文件所在的地方(換句話說,被打包在jar中)。為了完成這個(gè)例子,你必須寫你自己的ivysettings文件(那樣你在這里例子中你將使得http://myserver/ivy/myivysettings-public.xml可用)來定義你自己的公共解析器。例如:
          <ivysettings>
            
          <resolvers>
              
          <filesystem name="public">
                
          <ivy pattern="/path/to/my/public/rep/[organisation]/[module]/ivy-[revision].xml" />
                
          <artifact pattern="/path/to/my/public/rep/[organisation]/[module]/[artifact]-[revision].[ext]" />
              
          </filesystem>
            
          </resolvers>
          </ivysettings>

          現(xiàn)在為了正確地從默認(rèn)設(shè)置中獲益,你需要做的最后一件事情是每個(gè)包含的ivysettings文件的內(nèi)容:

          ivysettings-public.xml
          <ivysettings>
            
          <resolvers>
              
          <ibiblio name="public" m2compatible="true"/>
            
          </resolvers>
          </ivysettings>

          ivysettings-shared.xml
          <ivysettings>
            
          <property name="ivy.shared.default.root"             value="${ivy.default.ivy.user.dir}/shared" override="false"/>
            
          <property name="ivy.shared.default.ivy.pattern"      value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
            
          <property name="ivy.shared.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
            
          <resolvers>
              
          <filesystem name="shared">
                
          <ivy pattern="${ivy.shared.default.root}/${ivy.shared.default.ivy.pattern}" />
                
          <artifact pattern="${ivy.shared.default.root}/${ivy.shared.default.artifact.pattern}" />
              
          </filesystem>
            
          </resolvers>
          </ivysettings>

          ivysettings-local.xml
          <ivysettings>
            
          <property name="ivy.local.default.root"             value="${ivy.default.ivy.user.dir}/local" override="false"/>
            
          <property name="ivy.local.default.ivy.pattern"      value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
            
          <property name="ivy.local.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
            
          <resolvers>
              
          <filesystem name="local">
                
          <ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}" />
                
          <artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}" />
              
          </filesystem>
            
          </resolvers>
          </ivysettings>

          ivysettings-main-chain.xml
          <ivysettings>
            
          <resolvers>
              
          <chain name="main" dual="true">
                
          <resolver ref="shared"/>
                
          <resolver ref="public"/>
              
          </chain>
            
          </resolvers>
          </ivysettings>

          ivysettings-default-chain.xml
          <ivysettings>
            
          <resolvers>
              
          <chain name="default" returnFirst="true">
                
          <resolver ref="local"/>
                
          <resolver ref="main"/>
              
          </chain>
            
          </resolvers>
          </ivysettings>

              在這里,你有足夠的提示來配置你想要的方式...查閱設(shè)置文檔來看你想要做的是不是可能,并繼續(xù)前行!


          posted on 2009-09-24 20:58 sky ao 閱讀(4868) 評論(0)  編輯  收藏 所屬分類: project building

          主站蜘蛛池模板: 威海市| 桂东县| 永寿县| 莆田市| 宜兰市| 高州市| 调兵山市| 志丹县| 筠连县| 永宁县| 容城县| 云霄县| 增城市| 遂溪县| 柳江县| 冷水江市| 安西县| 楚雄市| 岑巩县| 渝中区| 平罗县| 平果县| 阿拉善盟| 阳原县| 兴义市| 从化市| 应用必备| 贺兰县| 安徽省| 昌平区| 太和县| 华坪县| 哈尔滨市| 巴楚县| 右玉县| 双鸭山市| 修水县| 永顺县| 沁阳市| 甘洛县| 浦北县|