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。
ivy.deps.changed
从2.0起:
如果你设置参数checkIfCompiled为false(默认是true以保持向后兼容),属性ivy.deps.changed将不被设置。当你有进行多配置下的多模块构建时这容许完善你的构建。
从2.0起:
额外的,如果resolveId属性被设置,下列属性也将被设置:
* ivy.organisation.${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为
"ivy.resolved.descriptor"
5) 属性
Attribute | Description | Required |
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起)
可使用的选项是:
- default
默认日志设置,所有通常的消息都将被输出到控制台
- download-only
不输出除下载信息外的所有通常的消息。如果每个东西都在缓存里面的解析则不会输出任何消息。
- quiet
所有消息都不输出,让整个解析过程保持安静除非发生错误
|
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) 示例
<ivy:resolve file="path/to/ivy.xml"/>
解析在path/to/ivy.xml文件中声明的所有依赖。
<ivy:resolve file="path/to/ivy.xml" transitive="false" />
和上面相同,但是不解析间接依赖。
<ivy:resolve file="path/to/ivy.xml" conf="default, test"/>
解析在path/to/ivy.xml文件配置default和test中声明的依赖。
<ivy:resolve file="path/to/ivy.xml" type="jar"/>
解析在path/to/ivy.xml文件中声明的所有依赖,但是只下载jar制品。
<ivy:resolve organisation="apache" module="commons-lang" revision="2+" inline="true" />
从仓库中解析commons-lang模块的2+修订版本,和它的依赖。