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

ivy教程(2)-快速開始

編輯:關於JAVA

在這個例子中,我們將看到使用ivy的一個最簡單的方式。不使用任何特殊設置,ivy將使用maven2 倉 庫來解析你在ivy文件中聲明的依賴。讓我們來看一眼涉及到的文件的內容。

你將在ivy發行包的src/example/hello-ivy 目錄下找到這個教程的源文件。

1) ivy.xml 文件

這個文件用於描述項目對其他類庫的依賴。

這裡是例子

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

這個文件的格式非常容易理解,但是讓我們給出一些關於這裡聲明的東西的細節。首先,根元素ivy- module,version屬性用於告訴ivy這個文件使用的ivy的版本。

然後是info標簽,用於給出和這個我們正在定義依賴的模塊有關的信息。這裡只定義了組織和模塊名 ,你可以自由選擇任何你想要的組織和模塊名,但是我們建議不要帶空格。

最後,dependencies 部分讓你定義依賴。這裡這個模塊依賴兩個類庫:commons-lang 和 commons- cli。如你所看到的,我們使用org和name屬性來定義我們需要的依賴的組織和模塊名。rev屬性用於明確 說明你依賴的模塊的修訂版本。

為了知道如何填寫這些屬性,你需要知道你依賴的類庫的准確信息。ivy默認使用maven2 倉庫。我們 推薦你使用mvnrepository.com 來查找你需要的模塊。一旦你找到它,你將得到如何在一個maven POM中 聲明依賴的細節。例如:

<dependency>
     <groupId>commons-lang</groupId>
     <artifactId>commons-lang</artifactId>
     <version>2.0</version>
</dependency>

為了將這些信息轉換為ivy依賴聲明,你所需要做的只是使用groupId 作為組織,artifactId作為模塊 名。這是我們在這個教程中為依賴做的,commons-lang 和 commons-cli。注意使用commons-lang 和 commons-cli 作為組織不是組織應該是什麼的最好的例子。更好的方式是使用org.apache, org.apache.commons 或 org.apache.commons.lang. 然而,這是在maven2倉庫中如何標識這些模塊的方 法,因此獲得他們的最簡單的方式是照原來的樣子使用細節(你將會看到在構建一個倉庫時,你可以使用 命名空間來重新定義這些名稱,如果你想讓某些東西更加清晰)。

如果你想得到在ivy文件中可以做什麼的更多細節,你可以看一下ivy文件的參考文檔。

2) build.xml 文件

對應的build文件包含一個target集合,容許解析在ivy文件中聲明的依賴,編譯並運行示例代碼,生 成依賴解析報告,並清理項目的緩存。

你可以使用標准的"ant -p" 來獲取可用的target列表。可以隨意看一下整個文件,這裡是和依賴解析 有關的部分:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy"  default="run">
   
    
   
     <!-- =================================
           target: resolve             
          ================================= -->
     <target name="resolve" description="--> retrieve dependencies with  ivy">
         <ivy:retrieve />
     </target>
</project>

如你所見,調用ivy來解析和獲取依賴是非常簡單的:如果ivy安裝正確,你所需要做的只是在你的ant 文件中定義一個xml的命名空間 (xmlns:ivy="antlib:org.apache.ivy.ant")。然後在這裡命名空間中所 有的ivy ant 任務都可用。

這裡我們只使用了一個任務:retrieve 任務。沒有任何屬性,它將使用默認設置並查找名為ivy.xml 的文件來獲取依賴定義。這正是我們想要的,因此我們不需要做其他。

注意,在這案例中我們定義了一個"resolve" target 並調用了retrieve 任務。這聽起來有點令人困 惑,實際上retrieve任務會執行一次resolve(解析依賴並下載他們到本地緩存),然後再執行一次 retrieve。查看How does it work ? 頁面來得到關於這個的更多細節。

3) 運行項目

好,現在我們看到文件已經解析好了,讓我們運行這個實例來看會發生什麼。打開一個shell(或者命 令行)窗口,並進入hello-ivy 實例目錄。然後,在命令提示符下,運行"ant":

I:\hello-ivy>ant
Buildfile: src\example\hello-ivy\build.xml
resolve:
[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 ::  http://ant.apache.org/ivy/ ::
[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.   A default instance will be used
[ivy:retrieve] no settings file found, using default....
[ivy:retrieve] :: loading settings :: url =  jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy- core.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: [ org.apache | hello-ivy |  working@BEN-ScokartG ]
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     found [ commons-lang | commons-lang | 2.0 ] in public
[ivy:retrieve]     found [ commons-cli | commons-cli | 1.0 ] in public
[ivy:retrieve]     found [ commons-logging | commons-logging | 1.0 ] in  public
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons- lang/2.0/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] (3335ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons- cli/1.0/commons-cli-1.0.jar ....
[ivy:retrieve] .................................... (29kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ commons-cli | commons-cli | 1.0 ]/commons -cli.jar[jar] (2053ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-logging/commons- logging/1.0/commons-logging-1.0.jar ....
[ivy:retrieve] .......... (21kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] [ commons-logging | commons-logging | 1.0  ]/commons-logging.jar[jar] (1933ms)
[ivy:retrieve] :: resolution report ::
[ivy:retrieve]     :: evicted modules:
[ivy:retrieve]     [ commons-lang | commons-lang | 1.0 ] by [[ commons-lang  | commons-lang | 2.0 ]] in [default]
     ---------------------------------------------------------------------
     |                  |            modules             ||   artifacts   |
     |       conf       | number| search|dwnlded|evicted||  number|dwnlded|
     ---------------------------------------------------------------------
     |      default     |   4   |   3   |   0   |   1    ||   3   |   3   |
     ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: [ org.apache | hello-ivy ]
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     3 artifacts copied, 0 already retrieved
run:
      [java] standard message : hello ivy !
      [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy !
BUILD SUCCESSFUL
Total time: 14 seconds

4) 發生了什麼?

在沒有任何設置的情況下,ivy從maven2 倉庫中獲取文件。這就是這裡發生的事情。

resolve任務在maven2 倉庫中發現commons-lang 和 commons-cli 模塊,識別commons-cli 依賴於 commons-logging並作為間接依賴解析它。然後ivy下載所有對應的制品到它的緩存中(默認在你的user home下的.ivy2/cache 目錄)。

最後,retrieve任務將這些解析好的jar包從ivy緩存復制到項目默認的lib目錄(你可以簡單地通過設 置retrieve任務的pattern屬性來改變).

你可能會發現這個任務僅僅為輸出一個"Hello Ivy !"信息就花費了很長的時間。但是記住大量的時間 用在從網絡下載需要的文件。讓我們再次運行它:

I:\hello-ivy>ant
Buildfile: src\example\hello-ivy\build.xml
resolve:
[ivy:retrieve] :: Ivy 2.0.0-beta1-local-20071104204849 - 20071104204849 ::  http://ant.apache.org/ivy/ ::
[ivy:retrieve] No ivy:settings found for the default reference 'ivy.instance'.   A default instance will be used
[ivy:retrieve] no settings file found, using default...
[ivy:retrieve] :: loading settings :: url =  jar:file:/c:/dev/data/opensource_workspace/ivy/build/artifact/ivy- core.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: [ org.apache | hello-ivy |  working@BEN-ScokartG ]
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     found [ commons-lang | commons-lang | 2.0 ] in public
[ivy:retrieve]     found [ commons-cli | commons-cli | 1.0 ] in public
[ivy:retrieve]     found [ commons-logging | commons-logging | 1.0 ] in  public
[ivy:retrieve] :: resolution report ::
[ivy:retrieve]     :: evicted modules:
[ivy:retrieve]     [ commons-lang | commons-lang | 1.0 ] by [[ commons-lang  | commons-lang | 2.0 ]] in [default]
     ---------------------------------------------------------------------
     |                  |            modules             ||   artifacts   |
     |       conf       | number| search|dwnlded|evicted||  number|dwnlded|
     ---------------------------------------------------------------------
     |      default     |   4   |   0   |   0   |   1    ||   3   |   0   |
     ---------------------------------------------------------------------
[ivy:retrieve] :: retrieving :: [ org.apache | hello-ivy ]
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     0 artifacts copied, 3 already retrieved
run:
      [java] standard message : hello ivy !
      [java] capitalized by org.apache.commons.lang.WordUtils : Hello Ivy !
BUILD SUCCESSFUL
Total time: 3 seconds

太好了!緩存被使用,不再需要下載,構建只在瞬間。

現在,如果你想生成一個泥的模塊的所有依賴的詳細報告,你可以調用report target,並查看在 build目錄中的生成文件。你將得到一些類似這樣的東西。

如你所見,使用ivy來解析存儲在maven2 倉庫中的依賴是非常容易的。現在你可以繼續下一個教程來 學習更多的關於如何使用模塊配置的內容,這是一個非常強大的ivy特殊特性。其他教程也可用,你將學 習到如何使用ivy設置來建造一個可能非常復雜的企業倉庫。現在也是開始閱讀參考文檔的好時機,尤其 是介紹題材可以很好的給出ivy概況。對於開始考慮如何使用ant + ivy來構建一個干淨而健壯的構建系統 來說,最佳實踐頁面是必須閱讀的。

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