ivy綁定一些默認設置,這使得在通常環境下使用ivy很容易。這個教程,接近於參考文檔,解釋這些 默認設置是什麼和他們怎樣調整來滿足你的需要。
為了完整的理解設置的概念和你可以用它們做什麼,我們建議閱讀其他和設置相關的教程(如Multiple Resolvers 和 Dual 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>
在這裡,你有足夠的提示來配置你想要的方式...查閱設置文檔來看你想要做的是不是可能,並繼續前 行!