衝突管理器可在衝突的模組修訂版本列表中選擇需保留的修訂版本。若修訂版本對應相同模組(相同組織/模組名對),稱為衝突修訂版本列表。可用衝突管理器列表見衝突管理器頁面。配置細節請看 Ivy 檔案參考的衝突章節。
1.3 版後 Ivy 多處使用模式匹配一系列物件。例如用匹配所有想排除模組的模式宣告依賴,可立即排除多模組。Ivy 使用可插入式模式匹配器,預設三種:
任何匹配器中 '*' 皆有匹配任意內容的特殊含義,對不依賴匹配器的預設值特別有用。
1.4 版後 Ivy XML 檔案中幾個標籤可透過「附加屬性」擴展。想法簡單:需更多資訊定義模組時,添加所需屬性,然後像訪問其他屬性一樣訪問(如在模式中)。2.0 版後建議為附加屬性使用 XML 命名空間,用 Ivy 附加命名空間最簡單。
<ivy-module version="2.0" xmlns:e="https://ant.apache.org/ivy/extra">
<info organisation="apache" module="foo" e:color="blue" status="integration" revision="1.59"/>
</ivy-module>
定義依賴時必須使用附加屬性,它們作為識別符使用,類似 org、name、revision:
<dependency org="apache" name="foo" e:color="blue" rev="1.5+"/>倉庫模式可定義為:
${repository.dir}/[organisation]/[module]/[color]/[revision]/[artifact].[ext]注意:模式中須使用非限定屬性名(不帶命名空間前綴)。不想用 XML 命名空間也可,但需使 ivy 檔驗證失效(不再符合正式 ivy xsd)。
九. 校驗和
1.4 版後 Ivy 允許使用校驗和來驗證下載檔案正確性。目前支援 MD5 和 SHA1。配置可全域或由解析器設定。全域用 ivy.checksums 列舉要檢測的算法(僅支援 md5、sha1),解析器上用 checksums 覆蓋全域設定。設定為逗號分隔的算法列表。
檢測時找到的第一個校驗和被檢測後結束。如設 "sha1, md5",發現 sha1 檔則用 sha1 比較,通過則視為正確;無 sha1 則找 md5;兩者皆無則不檢測。發布時所有列舉算法皆計算並上傳。預設 "sha1, md5"。修改預設設 ivy.checksums;想停用驗證設為 ""。
十. 事件和觸發器
1.4 版後 Ivy 完成依賴解析和其他任務時,在關鍵步驟前後發出事件。可用 Ivy API 監聽,或註冊觸發器在特定事件執行特定動作。此特性強大靈活,如允許依賴解析前建構依賴,或精確追蹤解析過程。細節見配置章節觸發器文檔。
十一. 循環依賴
1.4 版後循環依賴可直接或間接(A 依賴 A,或 A 依賴 B 且 B 依賴 A)。1.4 前導致錯誤。1.4 起行為可透過循環依賴策略配置。三個內建策略:
配置方法見配置頁面。
Ivy 高度依賴本地快取避免頻繁存取遠端倉庫,節省頻寬和時間。
Ivy 預設認為修訂版本永不修改。一旦快取有模組(元資料或制品),信任快取甚至不查詢倉庫。此優化多數情況有用,遵循「修訂版本永不變更」規範無問題。但視建構系統和依賴策略,可能願意更新模組。兩種變更:
提供者較少優化元資料。常發生依賴遺忘或遺失。解決方案:解析器設 checkModified="true",告訴 Ivy 檢查元資料是否被修改。Ivy 先檢查倉庫元資料最後修改時間,僅必要時下載並更新。
部分用戶(特別從 Maven 2 來)喜歡用特殊修訂版本處理頻繁變更模組。Maven 稱 SNAPSHOT,主張節約空間(只保留一修訂版本對應大量中間產物)。Ivy 用 "changing revision" 概念支援:Ivy 認為隨時間可能變更的修訂版本。可透過 dependency 標籤明確指定依賴可變更,或解析器用 changingPattern 和 changingMatcher 指定哪些修訂版本可變更。
一旦 Ivy 知曉修訂版本可變更,遵循原則避免頻繁檢查倉庫:若元資料未修改,視整個模組(含制品)未修改。若描述符已修改,檢查發布日期看是否同一修訂版本新發布。若發布日期修改,檢查制品最後修改時間戳並相應下載。因此用變更修訂版本時,用發布任務發布模組,請小心更新發布日期,並設解析器 checkModified="true"。
Ivy 有許多檔案操作,大多用路徑或路徑模式定位檔案。路徑可為相對或絕對,建議常用絕對路徑,免擔心相對路徑基準。Ivy 提供變數作為絕對路徑基準。如 ivy.basedir 存取基準目錄(Ant 中一致)。設定檔中有 ivy.settings.dir 指向設定檔目錄。
若真想用相對路徑,基準路徑取決於定義位置: