1) deliver
交付当前模块的解析好的描述符,而且可能执行依赖的递归交付。
这个任务主要做两个事情:
1. 生成一个解析好的ivy 文件
这个任务生成一个当前模块的解析好的描述符,基于最后一次解析。解析好的ivy文件包含交付的模块的已更新信息,例如修订版本和状态。
此外,所有被包含的配置的文件将包含在ivy文件中,而且变量被他们的值替代。
最终,在解析好的ivy文件中,动态修订版本被在解析过程中找到的静态的修订版本替换,因此这些ivy文件后面可以安全的使用来获得相同的依赖(前提条件是修订版本唯一的标识一个模块,这是ivy正常使用的基础)。
从1.3起 动态修订版本被静态修订版本的替换可以被关闭,因此动态修订版本被保留在ivy文件中。这对于发行的模块描述符是完全解析好的推荐标准是一个例外,所以请小心使用。
2. 执行递归交付
仅在delever target被设置给delever任务时才这样做。
如果delever target被设置,则为每个和这个任务设置的delever状态对比没有suffisant状态的依赖,它会被调用(通过antcall)。这意味着如果你交付一个集成修订版本,递归交付不会进行。
如果你交付一个里程碑或者发行修订版本,delever target将和每个集成依赖一起被调用。
delever target被调用时有下面的属性可用:
- dependency.name
递归交付的依赖的名称
- dependency.published.status
将交付的依赖的状态
- dependency.published.version
将交付的依赖的修订版本
- dependency.version
将交付的依赖的修订版本
dependency.published.status和dependency.published.version 要求用户通过ant输入任务给出(默认行为),或者对于整个递归交付过程总是相同,如果下列属性被设置:
- recursive.delivery.status
设置被要求交付的所有依赖的状态
- recursive.delivery.version
设置被要求交付的所有依赖的版本
通常交付任务自身引发另外一个ant build(使用ant 任务),虽然这取决于你。
交付的ivy文件将使用那些在这里给出的更新它的依赖的修订版本。
2) deliver和publish
交付任务大多数情况下并不显式调用,而且通过publish任务自动调用。因此,什么时候应该显示的调用deliver任务呢?当你真正需要区分什么是deliver任务产生的,什么是publish任务产生的时候。或者说,上传一个模块到仓库。
如果你想在上传之前处理产生的ivy文件(如果你想自动添加更多信息如使用SCM 标签,执行release的用户,...),这将非常有用。
如果你想触发一个递归交付并保证你如依赖一样得到递归交付的模块,它也将有用。在这种情况下你的构建的顺序可能像这样:
- ivy:configure
- ivy:resolve
- ivy:deliver with recursive delivery
- ivy:resolve again with the ivy file generated by the recursive delivery
- do your build stuff (compile, jar, whatever)
- ivy:publish
3) 属性
属性 | 描述 | 必要 |
deliverpattern |
ivy文件交付时使用的正则表达式
|
不,默认为${ivy.deliver.ivy.pattern} |
pubrevision |
发布时使用的修订版本
|
不,默认为${ivy.deliver.revision}如果设置了,或者解析好的修订版本如果设置了,或者时间戳 |
pubbranch |
the branch to use for the publication
发布时使用的分支
|
不,默认为${ivy.deliver.branch}如果设置了,或者解析好的分支如果设置了,或者没有(分支信息将不被更新)
|
pubdate |
the
publication date to use for the publication. This date should be either
'now', or a date given with the following pattern: yyyyMMddHHmmss
|
No. Defaults to 'now' |
status |
the status to use for the publication |
No. Defaults to ${ivy.status} |
delivertarget |
the target to call for recursive delivery |
No. No recursive delivery is done by default |
validate |
true to force ivy files validation against ivy.xsd, false to force no validation |
No. Defaults to default ivy value (as configured in configuration file) |
replacedynamicrev |
true to replace dynmic revisions by static ones in the delivered file, false to avoid this replacement (since 1.3) |
No. Defaults to true |
settingsRef |
A reference to the ivy settings that must be used by this task (since 2.0) |
No, 'ivy.instance' is taken by default. |
conf |
comma-separated list of configurations to include in the delivered file. Accepts wildcards. (since 2.0) |
No. Defaults to all configurations |
generateRevConstraint |
true to automatically generate a 'revConstraint' attribute in the deliverd file (see the dependency page for more info about this attribute), false to never generate this attribute (since 2.1.0) |
No. Defaults to true |
4) 例子
交付一个ivy文件,不使用private设置:
<deliver conf="*(public)" />