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: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 | 发布时使用的分支 |
不,默认为${ivy.deliver.branch}如果设置了,或者解析好的分支如果设置了,或者没有(分支信息将不被更新) |
pubdate |
用于发行的发行时间。这个时间应该要不是'now',要是是通过下面的正则表达式给出的时间:yyyyMMddHHmmss |
不,默认为'now' |
status |
用于发行的状态 |
不,默认为 ${ivy.status} |
delivertarget |
为递归交付而要调用的target |
不,默认不进行递归交付。 |
validate |
true to force ivy files validation against ivy.xsd, false to force no validation true强制ivy文件通过ivy.xsd进行验证,false强制不做验证。 |
不,默认为ivy的默认值 (在配置文件中设置) |
replacedynamicrev |
true强制在交付的文件中将动态修订版本替换为静态,false避免这个替换。(从1.3起) |
不,默认为true |
settingsRef |
必须被这个任务使用的ivy设置的引用(从2.0起) |
不,默认为'ivy.instance' |
conf |
需要包含在交付文件中的逗号分隔的配置列表。接受通配符。(从2.0起) |
不,默认为所有配置 |
generateRevConstraint |
true在交付的文件中自动生成一个'revConstraint'属性(查阅dependency 页面来得到更多的有关这个属性的信息), false从不生成这个属性(从2.1.0起) |
不,默认为true |
4) 例子
交付一个ivy文件,不使用private设置:
<deliver conf="*(public)" />