1) 解析
解析任务实际解析在ivy文件中描述的依赖,并将解析后的依赖放置到ivy缓存中。
如果在resolve任务前没有调用configure任务,则将使用默认的configuration (等同于不带参数的调用configure).
在这个任务调用之后,在ant中有四个属性被设置:
- ivy.organisation 设置为在用于解析的ivy文件中找到的组织名
- ivy.module 设置为在用于解析的ivy文件中找到的模块名
- ivy.revision 设置为在用于解析的ivy文件中找到的修订版本名,或者如果在制定的文件中没有修订版本名则是新生成的修订版本名。
- ivy.resolved.configurations 设置为解析好的configuration列表,逗号分隔。
从1.2起:
如果在最后一次解析后被解析的依赖发生了变化,一个额外的属性将被设置为true,否则为false。
从2.0起:
如果你设置参数checkIfCompiled为false(默认是true以保持向后兼容),属性ivy.deps.changed将不被设置。当你有进行多配置下的多模块构建时这容许完善你的构建。
从2.0起:
额外的,如果resolveId属性被设置,下列属性也将被设置:
* ivy.module.${resolveId}
* ivy.revision.${resolveId}
* ivy.resolved.configurations.${resolveId}
* ivy.deps.changed.${resolveId}
当ivy完成解析任务时,它将输出概要来说明解析了什么。概要看起来像这样:
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 4 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
这个表单给出一些关于依赖解析的统计。每行对应于一个解析了的配置。这个表单被划分为两个部分:
- modules
- number 在这个配置下被解析的依赖模块的总数目,包括间接的依赖。
- search 这是需要访问仓库的依赖模块的数目。如果模块还不在缓存中则需要访问仓库,或者要求最新版本,或者一些其他情况(例如,根据checkModified)
- dwnlded 从仓库下载的依赖的ivy文件的数目。使用清理好的缓存,这个数目可以比模块的总数目少,如果一些依赖没有提供ivy文件。
- evicted 被冲突管理器逐出的依赖模块的数目。
- artifacts
- number 在给定的配置中解析的制品的总数目。
- dwnlded 从仓库中实际下载的制品的数目。
2) Inline模式
从1.4起 inline模式容许在没有ivy文件的情况下通过直接设置需要从仓库中被解析的模块调用resolve。对于安装发布的软件特别有用,例如ant任务。当inline设置为true,组织模块和修订版本属性被用于指定哪个模块应该从仓库中解析。
注意:如果你想要设置标准ivy属性或者通过其他post-resolve任务重用inline解析的结果,类似retrieve, cachepath, report, ..., 你必须设置keep属性为true。
3) Resolve 模式
从1.4起 解析模式容许定义当执行解析时ivy应该如果使用依赖修订版本约束。
有两个模式可用:
- default 在这个模式下使用默认修订版本约束(通过 dependency 元素的rev属性来表示)
- dynamic 在这个模式下使用动态修订版本约束(通过 dependency 元素的revConstraint属性来表示)
4) 并发
在解析的过程中,ivy在解析缓存中创建一个文件。这个文件的创建并不是为了支持并发,意味着你不能在同样的解析缓存中,有同样模块的同样的resolveId的,两个并发解析。
给开发人员的备注:
在这个任务调用之后,有一个被解析的模块描述符的引用被设置在ant项目中,id为
5) 属性
file | path to the ivy file to use for resolution 用来解析的ivy文件的路径 |
No. 默认是${ivy.dep.file}或在inline模式下不设值 |
conf | a comma separated list of the configurations to resolve, or '*'. 用于解析的逗号分隔的配置列表,或者'*' Since 2.0 , you can also use '*(private)', '*(public)'. Note that when inline is true, the configuration '*' is equivalent as '*(public)'. 从2.0起 你也可以使用'*(private)', '*(public)'.注意当inline为true,配置'*'等同于'*(public)'. |
No. 默认是${ivy.configurations} |
refresh | true to force Ivy to resolve dynamic revision in this resolve process, false to use cached resolved revision since 2.0 true 强制ivy在这次解析过程中解析动态修订版本,false使用缓存的解析好的修订版本,从2.0起 |
No. 默认是false |
resolveMode | the resolve mode to use for this dependency resolution process since 2.0 这次依赖解析过程要使用的解析模式,从2.0起 |
No. 默认使用settings 中设置的解析模式 |
inline | true to use inline mode, false to resolve an ivy file since 1.4 true使用inline模块,false解析ivy文件,从1.4起 |
No. 默认为false |
keep | true
to keep the results of the resolve in memory, false to discard them.
When this is false, the standard ivy properties won't be set and other
postresolve-tasks (like retrieve and cachepath) won't be able to resuse
the results of this resolve! true在内存中保持这次的解析的结果,false 抛弃他们。当这个是false时,标准ivy属性不会设置而且其他post-resolve任务(类似retrieve和cachepath)将不能重用这次解析的结果! |
No. 对于inline模式默认是false,其他情况默认为true |
organisation | the organisation of the module to resolve in inline mode since 1.4 在inline模式下用于解析的模块的组织名,从1.4起 |
Yes 在inline模式下必须,其他不是 |
module | the name of the module to resolve in inline mode since 1.4 在inline模式下用于解析的模块的名称,从1.4起 |
Yes 在inline模式下必须,其他不是 |
revision | the revision constraint to apply to the module to resolve in inline mode since 1.4 在inline模式下适用于要解析的模块的修订版本约束,从1.4起 |
No. 在inline模式下默认为 "latest.integration",在标准模式下不设置 |
branch | the name of the branch to resolve in inline mode (since 2.1.0) 在inline模式下用于解析的分支的名字(从2.1.0起) |
在inline模式下默认为没有分支,标准模式下没有意义 |
type | comma separated list of accepted artifact types (since 1.2
) 逗号分隔的可以接受的制品类型列表(从1.2起) |
No. 默认为${ivy.resolve.default.type.filter} |
haltonfailure | true to halt the build on ivy failure, false to continue true 在ivy失败时挂起整个构建,false 继续 |
No. 默认为true |
failureproperty | the name of the property to set if the resolve failed since 1.4 在解析失败失败时设置的属性名称,从1.4起 |
No. 默认没有属性被设置 |
transitive | true to resolve dependencies transitively, false otherwise since 1.4 true解析间接依赖,false 不解析,从1.4起 |
No. 默认为true |
showprogress | true to show dots while downloading, false otherwise true在下载过程中显示点,false不显示 |
No. 默认为true |
validate | true to force ivy files validation against ivy.xsd, false to force no validation true强制对ivy文件用ivy.xsd验证,false强制不验证。 |
No. 默认为ivy的默认值(在配置文件中配置) |
settingsRef | A reference to the ivy settings that must be used by this task (since 2.0) 必须在这次任务中使用的ivy设置的引用(从2.0起) |
No, 默认使用'ivy.instance' |
resolveId | 后面可以用来引用这次解析的结果的id | No, 默认为'[org]-[module]'. |
log | 在解析过程中使用的日志设置(从2.0起) 可使用的选项是:
|
No, 默认为'default'. |
checkIfChanged | When set to true, the resolve will compare the result with the last resolution done on this module, with those configurations 当设置为true时,解析将比较这次的结果和这个模块的最后一次解析,使用那些配置 |
No, 默认为'true' |
6) 示例
解析在path/to/ivy.xml文件中声明的所有依赖。
和上面相同,但是不解析间接依赖。
解析在path/to/ivy.xml文件配置default和test中声明的依赖。
解析在path/to/ivy.xml文件中声明的所有依赖,但是只下载jar制品。
从仓库中解析commons-lang模块的2+修订版本,和它的依赖。