程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> ivy中文參考文檔(11)-ant任務

ivy中文參考文檔(11)-ant任務

編輯:關於JAVA

1) ant任務

使用ivy的主要和最頻繁的方式是在ant構建文件中。不過,ivy也可以作為獨立的應用被調用。

如果你使用ant版本1.6.0 或更高,你僅僅需要添加ivy的命名空間到你的項目中(你的project標簽的屬性)

xmlns:ivy="antlib:org.apache.ivy.ant"

這樣你就可以調用ivy任務了。

如果你想讓你的構建處理ivy.jar,不管是在ant的lib目錄還是在本地的lib目錄。你可以類似這樣使用任務定義

<path id="ivy.lib.path">
     <fileset dir="path/to/dir/with/ivy/jar" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
          uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>

結合項目命名空間中的antlib定義,它將從你的ant類庫或者本地目錄(在這個例子中試path/to/dir/with/ivy/jar)裝載ivy類。

如果你使用ant1.5.1或者更高,你不得不定義你在你的構建文件中使用的任務。例如:

<taskdef name="ivy-configure" classname="org.apache.ivy.ant.IvyConfigure"/>
   <taskdef name="ivy-resolve" classname="org.apache.ivy.ant.IvyResolve"/>
   <taskdef name="ivy-retrieve" classname="org.apache.ivy.ant.IvyRetrieve"/>
   <taskdef name="ivy-deliver" classname="org.apache.ivy.ant.IvyDeliver"/>
   <taskdef name="ivy-publish" classname="org.apache.ivy.ant.IvyPublish"/>

注意:上面列出的任務並不是詳盡。為了完整的有對應類的任務列表,請查看svn中的或者你使用的版本的antlib.xml

然後你可以使用任務,但是檢查他們的名字,下面的例子假設你使用ivy命名空間(ivy:xxx任務),不過對於ant1.5你不能使用命名空間 ,如果你想遵循上面的任務定義可以使用ivy-xxx任務。

如果你使用低於1.5.1的ant版本,你不能使用ivy任務...你應該作為外部程序來調用ivy。

2) 從ant中調用ivy: 開始步驟

一旦你的構建文件可以調用ivy任務,最簡單的使用ivy的任務就是不帶任何參數的調用ivy的retrieve任務。

<ivy:retrieve />

這將使用默認值調用ivy,在很多項目中是可行的。實際上,它等同於

<target name="resolve">
     <ivy:configure />

     <ivy:resolve file="${ivy.dep.file}" conf="${ivy.configurations}" />

     <ivy:retrieve pattern="${ivy.retrieve.pattern}" conf="${ivy.configurations}" />
</target>

這三個任務遵循ivy獲取依賴過程的3個主要步驟:

* 首先configure任務通過給出一個xml配置文件的路徑來講述怎樣找到依賴。

* 然後resolve任務實際解析ivy文件描述的依賴,並將這些依賴放置到ivy緩存(在配置文件中配置的一個目錄)

* 最後retrieve任務從緩存中復制依賴到任何你想要的文件系統中。隨後你可以用這些依賴用標准ant路徑來構造你的classpath。

為了更准確的理解ivy任務的行為,需要要知道在configure被調用的開始ivy裝載了一個屬性文件。這個屬性文件包含以下屬性:

ivy.project.dir = ${basedir}
ivy.lib.dir = ${ivy.project.dir}/lib
ivy.build.artifacts.dir = ${ivy.project.dir}/build/artifacts
ivy.distrib.dir = ${ivy.project.dir}/distrib

ivy.resolver.default.check.modified = false
ivy.default.always.check.exact.revision = true
ivy.configurations = *
ivy.resolve.default.type.filter = *
ivy.status = integration
ivy.dep.file = ivy.xml
ivy.settings.file = ivysettings.xml
ivy.retrieve.pattern = ${ivy.lib.dir}/[artifact]-[revision].[ext]
ivy.deliver.ivy.pattern = ${ivy.distrib.dir}/[type]s/[artifact]-[revision].[ext]
ivy.publish.src.artifacts.pattern = ${ivy.distrib.dir}/[type]s/[artifact]-[revision].[ext]
ivy.report.output.pattern = [organisation]-[module]-[conf].[ext]
ivy.buildlist.ivyfilepath = ivy.xml
ivy.checksums=sha1,md5

這些屬性的最新版本你可以檢查svn版本。

2.0之後,在調用第一個ivy任務後,屬性ivy.version將可用並包含被使用的ivy類庫的版本。

2) ivy任務屬性: 概論

任務屬性的值可能通過不同位置提供。這三個可能的位置是:

1. 任務屬性

2. 實例

3. 項目屬性

位置被要求使用這種順序,因此任務在任務屬性中設置的值將覆蓋在ivy實例中發現的值,例如。

這裡考慮的ivy實例是類Ivy的一個實例,通過調用configure任務建立,並且隨後被其他任務重用。因為大部分任務需要ivy實例,他們 首先檢查是否有實例可用(例如 configure已經被調用),如果沒有一個可用,則調用默認的configure,將得到的ivy實例結果用於後面的 任務(除非另外一個 configure被調用)。

通常理解這些不是必須的,但是如果你忘記在其他任務前調用configure而在你的環境中configure步驟是必須的,這將導致一些問題。

3) 主要任務的通常周期

4) 示例

這裡有一個使用ivy的更加復雜的構建文件的例子:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="sample" default="resolve">
     <target name="resolve">
         <ivy:configure file="../ivysettings.xml" />

         <ivy:resolve file="my-ivy.xml" conf="default, myconf" />

     </target>

     <target name="retrieve-default" depends="resolve">
         <ivy:retrieve pattern="lib/default/[artifact]-[revision].[ext]" conf="default" />
     </target>
     <target name="retrieve-myconf" depends="resolve">
         <ivy:retrieve pattern="lib/myconf/[artifact]-[revision].[ext]" conf="myconf" />
     </target>
     <target name="retrieve-all" depends="resolve">
         <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]" conf="*" />
     </target>
     <target name="deliver" depends="retrieve-all">
         <ivy:deliver deliverpattern="distrib/[artifact]-[revision].[ext]"
                      pubrevision="1.1b4" pubdate="20050115123254" status="milestone" />
     </target>
     <target name="publish" depends="deliver">
         <ivy:publish resolver="internal"
                      artifactspattern="distrib/[artifact]-[revision].[ext]"
                      pubrevision="1.1b4" />
     </target>
</project>

所有的ivy任務在隨後的頁面中介紹。

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