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任務在隨後的頁面中介紹。