retrieve 任務可將解析好的依賴複製到檔案系統的任意位置。這是一個 post-resolve 任務,擁有所有 post-resolve 任務共有的行為和屬性。
從 1.4 版本開始,此任務甚至可以根據依賴解析的結果,用實際應該存在的檔案來同步目標目錄。這意味著若將 sync 設為 "true",Ivy 不僅會複製必要的檔案,還會刪除那些不再需要的檔案。
同步實際上是刪除根目標目錄下不再是 retrieve 任務必須的所有檔案和目錄。根目標目錄是目標正則表達式中標示為第一級別的第一個標記的目錄。
例如:pattern: lib/[conf]/[artifact].[ext] → root: lib
| 屬性 | 描述 | 必要 | 預設值 |
|---|---|---|---|
| pattern | 用來複製依賴的模式 | 否 | ${ivy.retrieve.pattern} |
| ivypattern | 用來複製依賴的 ivy 檔案模式(1.3 起) | 否 | 預設不獲取依賴的 ivy 檔案 |
| conf | 要獲取的配置列表,逗號分隔 | 否 | 最後一次 resolve 調用解析好的配置,或未顯式調用 resolve 時為 * |
| sync | true 同步目標目錄,false 僅複製(1.4 起) | 否 | false |
| type | 可接受的制品類型列表,逗號分隔(1.4 起) | 否 | 所有制品類型 |
| symlink | true 建立符號連結,false 複製制品。符號連結的目的地取決於 useOrigin 屬性值(2.0 起) | 否 | false |
| settingsRef | 必須被此任務使用的 Ivy 設定引用(2.0 起) | 否 | 'ivy.instance' |
| log | 解析和獲取過程中使用的日誌設定(2.0 起) | 否 | 'default' |
<ivy:retrieve />
通常獲取最後一次解析調用的所有依賴到 lib 目錄中。
<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]"/>
依賴將分隔在按照配置命名的目錄中。例如有 default 和 test 兩個配置:
lib
default
commons-lang.jar
commons-logging.jar
test
junit.jar
注意:若一個依賴被兩個配置要求,它將被複製到兩個目錄中,但下載僅在 resolve 時進行一次。
<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]" sync="true" />
若 commons-logging 不再是 default 配置一部分,新的 retrieve 調用將刪除該檔案。未啟用同步時則不會刪除。
<ivy:retrieve pattern="${lib.dir}/[type]/[artifact]-[revision].[ext]" conf="runtime"/>
結果目錄結構類似:
lib
jar
commons-lang-1.0.jar
looks-1.1.jar
source
looks-1.1.zip
<ivy:retrieve organisation="foo" module="bar" inline="true"
pattern="${my.install.dir}/[artifact].[ext]"/>