程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> ivy教程(5)-雙重解析器

ivy教程(5)-雙重解析器

編輯:關於JAVA

在一些情況下,會發生這樣的事情:你的模塊描述符(ivy文件,maven pom, ...)被放置在一個地方, 而模塊的制品(jars,...)在另外一個地方。

雙重解析器用於滿足這種類型的需求,而這個教程將展示如何使用它。

1) 項目描述

讓我們看一下你的ivy發行包裡面的src/example/dual目錄.

它包含一個構建文件和3個目錄:

* settings: b包含ivy設置文件

* repository: ivy文件的示例倉庫

* project: 利用ivy雙重解析器的項目

1. dual項目

項目非常簡單,只包含一個簡單的類: example.Hello

它依賴兩個類庫: Apache commons-lang 和 Apache commons-httpclient.

這裡是項目的內容:

* build.xml: 項目的ant構建文件

* ivy.xml: ivy項目文件

* src\example\Hello.java: 項目僅有的一個類

讓我們看一下ivy.xml文件:

<ivy-module version="1.0">
     <info organisation="org.apache" module="hello-ivy"/>
     <dependencies>
         <dependency org="commons-httpclient" name="commons-httpclient" rev="2.0.2"/>
         <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
     </dependencies>
</ivy-module>

如你所見,這裡沒有任何特殊的東西...實際上,這就是ivy的原理: 保持ivy文件獨立於依賴解析的方 式。

2. ivy設置

ivy設置在settings目錄中;它只包含一個文件: ivysettings.xml.

<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>

這裡我們配置了一個解析器,默認的,它是一個雙重解析器。這個雙重解析器有兩個子解析器:第一 個被稱為是雙重解析器的"ivy"或"metadata"解析器,而第二個被稱為"artifact" 解析器。重要的是雙重 解析器必須嚴格的擁有兩個遵循這個給定順序的解析器。

metadata解析器,這裡是一個文件解析器,僅僅用於查找模塊的描述符,在這個案例中是ivy文件。這 個解析器給出的設置闡述說所有ivy文件都在同一個目錄中,命名形如[module]-ivy-[revision].xml.如 果我們檢查倉庫目錄,我們可以確認它包含一個名為commons- httpclient-ivy-2.0.2.xml的文件。它滿 足給定的模式並將因此被這個解析器找到。

artifact解析器就是一個ibiblio 解析器,配置為m2compatible 模式以便使用maven2倉庫,屬性 usepoms="false" 確保它不會使用maven2 metadata。注意,這並不是嚴格要求,因為在雙重解析器中的 第二個解析器(artifact解析器)本來就不會被要求查找模塊metadata。

2) walkthrough

step 1 : 准備

打開一個dos或者shell窗口,並進去"dual"目錄

step 2 : 清理

在提示符下: ant

這將清理整個項目目錄樹(已編譯的類和獲得的libs)和ivy緩存。

你可以再每次你想清理這個例子時做這個事情。

step 3 : 運行項目

進入projuect目錄,並簡單運行ant

I:\dual\project>ant
Buildfile: src\example\dual\project\build.xml
resolve:
[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 ::  http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: file =  C:\dev\data\opensource_workspace\ivy\src\example\dual\config\ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: [ org.apache | hello-ivy |  working@BEN-ScokartG ]
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     found [ commons-httpclient | commons-httpclient | 2.0.2 ]  in ivys
[ivy:retrieve]     found [ commons-httpclient | commons-logging | 1.0.4 ] in  ibiblio
[ivy:retrieve]     found [ commons-lang | commons-lang | 2.0 ] in  ibiblio
[ivy:retrieve] downloading http://www.ibiblio.org/maven/commons-httpclient/jars/commons -httpclient-2.0.2.jar ...
[ivy:retrieve] ........................................................
[ivy:retrieve] ........................................................
[ivy:retrieve] ............ (220kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ commons-httpclient | commons-httpclient |  2.0.2 ]/commons-httpclient.jar[jar] (11676ms)
[ivy:retrieve] downloading http://www.ibiblio.org/maven/commons-lang/jars/commons-lang- 2.0.jar ...
[ivy:retrieve] ........................................................
[ivy:retrieve] ............................ (165kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ commons-lang | commons-lang | 2.0  ]/commons-lang.jar[jar] (7651ms)
[ivy:retrieve] downloading http://www.ibiblio.org/maven/commons-logging/jars/commons- logging-1.0.4.jar ...
[ivy:retrieve] ............................ (37kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ commons-httpclient | commons-logging |  1.0.4 ]/commons-logging.jar[jar] (9724ms)
[ivy:retrieve] :: resolution report ::
     ---------------------------------------------------------------------
     |                  |            modules             ||   artifacts   |
     |       conf       | number| search|dwnlded|evicted||  number|dwnlded|
     ---------------------------------------------------------------------
     |      default     |   3   |   3   |   0   |   0    ||   3   |   3   |
     ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: [ org.apache | hello-ivy ]
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     3 artifacts copied, 0 already retrieved
run:
     [mkdir] Created dir:  C:\dev\data\opensource_workspace\ivy\src\example\dual\project\build
     [javac] Compiling 1 source file to  C:\dev\data\opensource_workspace\ivy\src\example\dual\project\build
      [java] standard message : hello ivy !
      [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy !
      [java] head status code with httpclient: 200
      [java] now check if httpclient dependency on commons-logging has been  realized
      [java] found logging class in classpath: interface  org.apache.commons.logging.Log
BUILD SUCCESSFUL
Total time: 37 seconds

你可以看到,ivy不僅僅下載commons-lang 和commons-httpclient,而且還有commons-logging.實際 上,commons-logging是httpclient的依賴,我們可以看到在倉庫目錄中找到的httpclient 的ivy文 件.

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

想這樣每個東西都工作的很好,ivy文件在倉庫目錄下被找到而制品從ibiblio下載。

這種類型的配置在你不想依賴maven2倉庫的metadata或者你想為一些或者全部模塊完全利用ivy文件時 有用。

有關雙重解析器的完整的解析,請查閱對應的參考文檔。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved