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

Ivy 教程 (5):雙重解析器

     編輯:Java 相關知識

適用場景:模組描述檔與制品分離存放

某些情況下,模組的中繼資料(Ivy 檔、Maven POM)與實際制品(JAR、WAR)分散在不同位置。雙重解析器正是為此設計:它組合兩個子解析器,第一個專責尋找模組描述檔,第二個專責下載制品。

範例專案結構

dual/
├── settings/ivysettings.xml   # 雙重解析器設定
├── repository/                # 本地存放 Ivy 描述檔
│   └── commons-httpclient-ivy-2.0.2.xml
└── project/                   # 示範專案
    ├── ivy.xml
    ├── build.xml
    └── src/example/Hello.java

專案依賴

<dependencies>
  <dependency org="commons-httpclient" name="commons-httpclient" rev="2.0.2"/>
  <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
</dependencies>

雙重解析器設定

<ivysettings>
  <settings defaultResolver="dual-example"/>
  <resolvers>
    <dual name="dual-example">
      <filesystem name="ivys">
        <ivy pattern="${ivy.settings.dir}/../repository/[module]-ivy-[revision].xml"/>
      </filesystem>
      <ibiblio name="ibiblio" m2compatible="true" usepoms="false"/>
    </dual>
  </resolvers>
</ivysettings>

關鍵點

  • dual 解析器必須包含兩個子解析器,順序固定:第一個為 metadata 解析器,第二個為 artifact 解析器。
  • Metadata 解析器(filesystem):從本地 repository/ 讀取 Ivy 檔,命名模式為 [module]-ivy-[revision].xml。
  • Artifact 解析器(ibiblio):以 Maven 2 相容模式從 Central 下載 JAR,usepoms="false" 確保不嘗試讀取 POM(因 metadata 已由第一解析器提供)。

執行驗證

進入 dual/project 執行 ant,解析日誌:

found [ commons-httpclient | commons-httpclient | 2.0.2 ] in ivys
found [ commons-httpclient | commons-logging | 1.0.4 ] in ibiblio
found [ commons-lang | commons-lang | 2.0 ] in ibiblio
  • commons-httpclient 的模組描述檔從本地 ivys 解析器找到。
  • 其依賴 commons-logging 及另一額外依賴 commons-lang 的描述檔與制品均從 ibiblio 獲取。
  • 最終成功下載三個 JAR 並執行測試程式,驗證 HttpClient 與 Commons Lang 運作正常。

本地 Ivy 描述檔內容

<ivy-module version="1.0">
  <info organisation="commons-httpclient" module="commons-httpclient" revision="2.0.2" status="release"/>
  <dependencies>
    <dependency org="commons-logging" name="commons-logging" rev="1.0.4" conf="default"/>
  </dependencies>
</ivy-module>

此檔案為原始 Maven POM 轉換而來,聲明了 commons-logging 依賴,使 Ivy 能正確解析傳遞依賴。

應用價值

當你不想依賴 Maven Central 的中繼資料品質,或需為特定模組提供自訂的 Ivy 描述檔(如修正錯誤依賴、新增配置、調整衝突策略)時,雙重解析器讓你「以 Ivy 管 Ivy,以 Maven 取制品」,兼具靈活與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved