Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          ivy教程(3)-調整默認設置


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

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

          1) 概念

              默認設置主要是3種倉庫組成:

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

              * shared / 共享
                在團隊的所有成員之間共享的倉庫。

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

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

              現在讓我們更詳細的描述這些倉庫概念的每一個。后面我們會描述如何實際配置它們。

              1. local / 私有

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

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

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

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

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

              2. shared / 共享

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

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

              3. public / 公共

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

          2) 安裝倉庫

              現在我們已經看到三個倉庫中的每一個的目標,讓我們看怎樣安裝他們并配置以便滿足你的需求。

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

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

              * 在任何ivy調用前,在你的構建文件中設置一個ant屬性,如果你通過ant使用ivy
              * 設置一個環境變量,如果你通過命令行使用ivy

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

             現在我們將展示如何為不同類型的倉庫覆蓋默認值,注意你可以在下面的默認設置的細節中發現這些默認值是什么。

              1. Local

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

              如果你已經有了一些你想作為你的本地倉庫來使用的東西,你可能同樣想修改這個倉庫的布局。再一次,有兩個變量可用于此:
          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

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

          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
              默認,公共倉庫是出于m2 兼容模式下的ibiblio(換句話說,maven2的公共倉庫).

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

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

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

          3) 走的更遠

              好,我們已經看到修改這三個主要倉庫的設置是很容易的。但是在web服務器上我的共享倉庫是什么?如果你不想使用maven2 倉庫作為公共的倉庫。或者其他...

              沒有問題,ivy富有彈性并且可以用非常特殊的設置進行配置以滿足你的需要和環境。但是在考慮你自己的設置前,我們建議閱讀后面的內容,你將要學習如何修改默認設置的一部分并調整其他。

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

              默認,ivy使用被打包在ivy的jar包中的ivysettings.xml來配置。這里是設置文件:
          <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包含被修改為包含自產的公共解析器。注意同樣可以像這樣使用,感謝${ivy.default.settings.dir} 是一個變量的事實,這個變量經常設置為ivy默認設置文件所在的地方(換句話說,被打包在jar中)。為了完成這個例子,你必須寫你自己的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>

          現在為了正確地從默認設置中獲益,你需要做的最后一件事情是每個包含的ivysettings文件的內容:

          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>

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


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

          主站蜘蛛池模板: 灌南县| 驻马店市| 富宁县| 晋中市| 太保市| 乌鲁木齐县| 镇坪县| 滨州市| 长沙市| 马龙县| 罗甸县| 凤庆县| 易门县| 环江| 丰台区| 永济市| 翁牛特旗| 宜城市| 东海县| 承德县| 永仁县| 利川市| 南通市| 咸阳市| 沾化县| 渭源县| 山阳县| 界首市| 贞丰县| 乌拉特后旗| 共和县| 武陟县| 阜康市| 阳朔县| 建德市| 新余市| 洛阳市| 阳东县| 望城县| 海阳市| 庐江县|