首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ivy 參考文檔:主要概念(下)

     編輯:Java 相關知識

六. 衝突管理器

衝突管理器可在衝突的模組修訂版本列表中選擇需保留的修訂版本。若修訂版本對應相同模組(相同組織/模組名對),稱為衝突修訂版本列表。可用衝突管理器列表見衝突管理器頁面。配置細節請看 Ivy 檔案參考的衝突章節。

七. Pattern Matcher 模式匹配

1.3 版後 Ivy 多處使用模式匹配一系列物件。例如用匹配所有想排除模組的模式宣告依賴,可立即排除多模組。Ivy 使用可插入式模式匹配器,預設三種:

  • exact:僅字串等於模式時匹配
  • regexp:使用 Java 1.4+ Pattern 類支援的正則表達式
  • glob:Unix 風格 glob 匹配,* 匹配任意字串、? 匹配單一字符。需 jakarta oro 2.0.8 在 classpath 中

任何匹配器中 '*' 皆有匹配任意內容的特殊含義,對不依賴匹配器的預設值特別有用。

八. 附加屬性

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 起行為可透過循環依賴策略配置。三個內建策略:

  • ignore/忽略:僅以詳細資訊警告標記
  • warn/警告:同忽略但標記為警告(預設)
  • error/錯誤:發現循環依賴時終止解析

配置方法見配置頁面。

十二. 快取和變更管理

Ivy 高度依賴本地快取避免頻繁存取遠端倉庫,節省頻寬和時間。

1) 快取類型

  • 倉庫快取:存放從模組倉庫下載的資料、相關元資訊及原始位置
  • 解析快取:存放 Ivy 重用解析結果的解析資料。每次新解析覆蓋,決不能多進程同時使用。通常只有一解析快取,但可定義多倉庫快取,每解析器用單獨快取

2) 變更管理

Ivy 預設認為修訂版本永不修改。一旦快取有模組(元資料或制品),信任快取甚至不查詢倉庫。此優化多數情況有用,遵循「修訂版本永不變更」規範無問題。但視建構系統和依賴策略,可能願意更新模組。兩種變更:

2.1) 模組元資料變更

提供者較少優化元資料。常發生依賴遺忘或遺失。解決方案:解析器設 checkModified="true",告訴 Ivy 檢查元資料是否被修改。Ivy 先檢查倉庫元資料最後修改時間,僅必要時下載並更新。

2.2) 制品變更

部分用戶(特別從 Maven 2 來)喜歡用特殊修訂版本處理頻繁變更模組。Maven 稱 SNAPSHOT,主張節約空間(只保留一修訂版本對應大量中間產物)。Ivy 用 "changing revision" 概念支援:Ivy 認為隨時間可能變更的修訂版本。可透過 dependency 標籤明確指定依賴可變更,或解析器用 changingPattern 和 changingMatcher 指定哪些修訂版本可變更。

一旦 Ivy 知曉修訂版本可變更,遵循原則避免頻繁檢查倉庫:若元資料未修改,視整個模組(含制品)未修改。若描述符已修改,檢查發布日期看是否同一修訂版本新發布。若發布日期修改,檢查制品最後修改時間戳並相應下載。因此用變更修訂版本時,用發布任務發布模組,請小心更新發布日期,並設解析器 checkModified="true"。

十三. 路徑處理

Ivy 有許多檔案操作,大多用路徑或路徑模式定位檔案。路徑可為相對或絕對,建議常用絕對路徑,免擔心相對路徑基準。Ivy 提供變數作為絕對路徑基準。如 ivy.basedir 存取基準目錄(Ant 中一致)。設定檔中有 ivy.settings.dir 指向設定檔目錄。

若真想用相對路徑,基準路徑取決於定義位置:

  • ivy 檔案中:相對於 ivy 檔案自身(唯一可能路徑為 include 宣告)
  • 設定檔中:檔案包含路徑(屬性檔載入、設定檔包含)相對於設定檔目錄。其他路徑除非明確註記必須絕對
  • Ant 任務和 Ivy 參數中:相對於 Ivy 基準路徑,Ant 中調用時即 Ant basedir
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved