- 浏览: 583273 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (188)
- java (14)
- web (14)
- web service (3)
- 杂谈 (14)
- Version Control (13)
- software test (30)
- linux (17)
- database (3)
- distributed storage and computing (1)
- ejb (7)
- project building (46)
- spring & IOC (2)
- Thread (2)
- xml (2)
- tool software (0)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
- project manager (9)
- OSGI (1)
- nosql (3)
最新评论
-
sp42:
好搞笑
你懂不懂xml! (2) -
cherishmmo2004:
感觉你们都很牛掰,我们做的一个运维平台也是用karaf的,用k ...
基于osgi开发大型的企业应用 -
liubey:
“自作聪明”的使用了读写锁,其实只使用ReentrantLoc ...
编码最佳实践(4)--小心LinkedHashMap的get()方法 -
liubey:
你这个代码是sublist后仍然一直持有这个sub的引用,一般 ...
编码最佳实践(5)--小心!这只是冰山一角 -
xiegqooo:
初学maven(5)-使用assembly plugin实现自定义打包
六. 冲突管理器
冲突管理器可以在冲突的模块修订本列表中选择需要保留的修订本。
如果修订本对应相同的模块,举例说相同的组织/模块名对,那么称为冲突的修订本列表。
可用的冲突管理器列表在可以冲突管理器页面可以得到。
想得到更多如果配置冲突管理器的细节,请看ivy文件参考的冲突章节。
七. Pattern matcher 模式匹配
从1.3之后在很多地方ivy使用模式来匹配一系列对象。例如,当通过使用匹配所有想排除的模块的模式来声明一个依赖时,你可以立即排除这多个模块。
ivy使用可插入式的模式匹配器来匹配哪些对象名。默认定义好的有3个:
* exact
This matcher matches only string when they are equal to the pattern one
这个匹配器仅匹配字符串,要求和模式相同。
* regexp
这个匹配器容许你使用java1.4或者更高版本的Pattern类支持的正则表达式
* glob
这个匹配器容许你使用unix风格的glob匹配器,仅有的能使用的字符是匹配任何字符串的*和精确匹配单个字符的?。注意仅仅当jakarta oro2.0.8在classpath中时这个匹配器才可以使用。
同样请注意,在任何匹配器中,字符'*'有匹配任意东西的特殊含义。对于不依赖匹配器的默认值尤其有用。
八. 附加属性
从1.4版本之后在ivy的xml文件中有几个标签是可以通过被称为附加属性的东西来进行扩展。想法很简单:如果你需要更多信息来定义你的模块,你可以添加你需要的属性,然后能够像访问其他属性一样访问它,比如在你的模式中。
从2.0版本之后,可以并且推荐为你的附加属性使用xml命名空间。使用ivy附加命名空间是最简单的添加你自己的附件属性的方法。
例如:
这里是一个ivy文件,属性'color'设置为blue:
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="apache"
module="foo"
e:color="blue"
status="integration"
revision="1.59"
/>
</ivy-module>
这样当你定义一个基于foo的依赖时你就必须使用附加属性。那些附加属性 被作为标识符实际使用,类似org,name和revision。
<dependency org="apache" name="foo" e:color="blue" rev="1.5+" />
你还可以这样定义你的仓库模式:
${repository.dir}/[organisation]/[module]/[color]/[revision]/[artifact].[ext]
注意在模式中科你必须使用非限定属性名(不带命名空间前缀)
如果你不想使用xml命名空间,这是可以做到的,但是你需要使ivy文件验证失效,因为你的文件不再符合任何正式的ivy xsd。查看设置文档来得知如何使验证失效。
九. 校验和
从1.4版本后,ivy容许使用校验和,被称为digester,来验证下载文件的正确性。
目前ivy支持MD5和sha1算法。
使用MD5还是sha1的配置可以是全局的,或者是由依赖解析器设置。全局是使用变量ivy.checksums来列举要进行的检测(仅支持md5和sha1),在每个解析器上你可以使用属性
checksums来覆盖全局设置。
设置是逗号分隔的使用的校验和算法。
在检测过程中(下载的时候),找到的第一个校验和将被检测,然后就结束。这意外着如果你设置为"sha1, md5",那么如果ivy发现了一个sha1文件,它将使用这个sha1来比较下载文件的sha1,并且如果比较是通过的,ivy将认为这个文件是正确的。如果没有发现sha1文件,ivy将查找md5文件。如果没有发现任何一个,将不进行检测。
在发布过程中,任何例举出来的校验和算法都将被计算和上传。
默认的校验和算法是"sha1, md5"。
如果你想修改这个默认值,你可以设置变量ivy.checksums。因此想使校验和验证失效,你仅仅需要设置ivy.checksums为""。
十. 事件和触发器
从1.4版本之后,当ivy完成依赖的解析和一些其他任务,ivy将在最重要的步骤前后发出事件。你可以使用ivy的api来监听这些事件,或者你甚至可以注册一个触发器在特定事件发生时来执行特定的动作。
这是尤其强大而灵活的特性,例如它容许在依赖解析前执行依赖的构建,或者在依赖解析过程中精确地追踪发生的事情。
更多关于时间和触发器的细节,请看本文档的配置章节中的触发器文档页面。
十一. 循环依赖
从1.4版本之后,循环依赖可以是直接或者间接。例如,如果A依赖A,这是循环依赖,如果A依赖B而B依赖A,这也是循环依赖。
在ivy1.4之前循环依赖会导致viy产生错误。到ivy1.4止,当ivy发现循环依赖时的行为可以通过循环依赖策略来配置。
3个内建的策略可用:
* ignore/忽略
循环依赖仅仅用详细的信息警告进行标志。
* warn / 警告
和忽略相同,除非它们被标识为警告(默认)
* error / 错误
发现循环依赖时终止依赖解析
查看配置页面来看如果配置你想使用的循环依赖策略。
十二. 缓存和变更管理
ivy非常依赖本地缓存来避免过于频繁的访问远程仓库,从而节约网络带宽和时间。
1) 缓存类型
ivy缓存由两个不同部分组成:
* 仓库缓存
仓库缓存是ivy保存从模块仓库下载的数据的地方,和一些关系到这些制品的元信息在一起,和他们的原始位置一样。
* 解析缓存
这个部分的缓存用来保存被ivy用来重用解析过程的结果的解析数据。
这个部分的缓存每次完成一次新的解析时都被覆盖,并且决不能被多进程同时使用。
通常只有一个解析缓存,但是你可以定义多个仓库缓存,每个解析器可以使用单独的缓存。
2) 变更管理
为了加快依赖解析和缓存使用的方法,ivy默认认为修订本从不修改。因此一旦ivy在它的缓存中有这个模块(元数据或者制品),ivy信任缓存,甚至不再查询仓库。大多数情况下这个优化时非常有用的,并且只要你遵循这个规范就不会引起问题: 修订本从不变更。除性能之外,还有几个好的原因来遵循这个原则。
无论如何,取决于你当前的构建系统和你的依赖管理策略,你可能更愿意更新你的模块。有两种变更需要考虑:
2.1) 模块元数据变更
模块提供者不考虑经常优化模块元数据,他们更多的关注他们的api或者行为(如果他们甚至提供模块元数据)。我们不喜欢的事情经常发生:我们不得不更新模块元数据,一个依赖被遗忘了,或者另一个丢失了......
在这种情况下,在你的依赖解析器上设置checkModified为"true"将是一个解决方案。这个标记告诉ivy需要检查模块的元数据相比较缓存是否被修改. ivy首先检查仓库中元数据的最后修改时间以决定只在必要时下载它,同样只在需要时更新它。
2.2) 制品变更
一些用户,尤其是从maven2过来的用户,喜欢使用一个特别的修订版本来处理经常变更的模块。在maven2中这个通常被称为SNAPSHOT(快照)版本,并且有一种主张认为这样可以帮助节约空间,因为只需要为开发时可能创建的大量的中间产物保留一个修订版本。
ivy使用"changing revision"的概念来支持这种方法。changing revision就是这样:一个ivy认为随着时间推移始终可能变更的修订版本.为了处理这个,可以通过使用以来标签明确指定一个依赖为可以变更,或者在解析器上使用changingPattern 和changingMatcher 属性来知名那个修订版本或者修订版本组可以被认为是变更的。
一旦ivy知道一个修订版本是变更的,它将遵循这样的原则来避免过于频繁的检查仓库:如果模块的元数据没有修改,它将认为整个模块(包括制品)没有修改。即使如果模块描述符文件已经修改,它将检查模块的发行数据来看这个是不是同一个修订版本的一个新的发行。然后如果发行数据被修改了,它将检查制品的最后修改时间戳,并相应的下载它们。
因此如果你想使用变更修订版本,使用发布任务来发布你的模块,请小心更新发布数据,然后一切都会工作的很好。并且记住也要将你的解析器设置checkModified=true"。
十三. 路径处理
作为一个依赖管理器,ivy有一系列的文件相关操作,大部分使用路径或者路径模式来在文件系统上定位文件。
这些路径可以明确是的相对路径或者绝对路径。我们推荐经常使用绝对路径,这样你不必担心你的相对路径的基准路径是什么。ivy提供一些变量,可以被用来作为你的绝对路径的基准路径。例如,ivy有基准路径的概念,这个基本和ant一致。你可以使用变量ivy.basedir来访问这个基准目录。因此如果你有类似这样的路径:
${ivy.basedir}/ivy.xml
你就得到了一个绝对路径。在设置文件中,你同样有一个名为ivy.settings.dir的变量指向你的设置文件所在的目录,这使得定义和这个目录相关的路径变得非常容易。
如果你真的想使用相对路径,被用于实际定位文件的基准路径取决于相对路径在哪里被定义:
* 在ivy文件中,路径是相对于ivy文件自身(在ivy文件中唯一可能的路径是用于配置包含申明)。
* 在设置文件中,用于文件包含的路径(也就是属性文件装载和设置文件包含)是相对于设置文件所在的目录。所有其他路径除非明确记录否则必须是绝对路径。
* 在ivy的ant任务和ivy参数或选项中,路径是相对于ivy基准路径的,当在ant中调用时这个路径就是ant的basedir路径一致。
发表评论
-
搜索maven依赖的网站推荐
2011-12-02 16:04 4319使用maven填写依赖的时候,常会遇到需要查一下gro ... -
hudson中subversion HEAD check out 的问题及疑惑
2010-09-30 10:56 40近期发现一个问题,hudson执行任务时,经常不能获取 ... -
你走你的阳光道,我走我的独木桥:整合ant ivy 和testng
2010-05-31 16:11 2077近期自己折腾自己,放着正统的maven + jun ... -
slf4j1.6.0-RC0和logback的0.9.20版本不兼容
2010-04-26 08:54 3514今天,尝试使用slf4j + logback的黄金组合,结果发 ... -
fisheye2.2.1 & Crucible 2.2.1 安装配置笔记
2010-04-27 16:48 31851) 下载 从atlassian网站 ... -
让ivy支持maven的classifier属性
2009-10-15 01:56 3185在maven中,对于一个依赖,除了groupId,ar ... -
ivy教程(1)-目录
2009-09-21 23:57 2952学习的最佳方式是实践!这是ivy教程将帮助你做到的 ... -
ivy教程(2)-快速开始
2009-09-22 11:48 3061在这个例子中,我们将看到使用ivy的一个最简单的方 ... -
ivy教程(3)-调整默认设置
2009-09-24 20:58 2358ivy绑定一些默认 ... -
ivy教程(4)-多解析器
2009-09-25 15:28 1803这个例子演示模块是如何被多解析器获得的。使用多解析 ... -
ivy教程(5)-双重解析器
2009-09-27 20:58 1723在一些情况下,会发生这样的事情:你的模块描述符(ivy ... -
ivy教程(6)-项目依赖
2009-09-29 23:32 3007这个示例将举例说明在两个项目之间的依赖。 depen ... -
ivy教程(7)-在多项目环境下使用ivy
2009-10-03 11:48 2369在上一个教程中,你已 ... -
ivy教程(8)-使用ivy模块配置
2009-10-04 10:15 2669这个教程介绍ivy文件中的模块配置的使用。ivy模块配置事实上 ... -
ivy教程(9)-架设仓库(1)-介绍
2009-10-04 13:42 1853install任务让你从一个仓库复制一个模块或者模 ... -
ivy教程(10)-架设仓库(2)-基础仓库复制
2009-10-04 15:04 3054在这个步骤中我们使用install任务来从mave ... -
ivy教程(11)-架设仓库(3)-使用命名空间
2009-10-09 21:04 2259现在你已经看到从一个已经存在的仓库创建你自己的仓库是如何的简单 ... -
ivy教程(12)-更多例子
2009-10-09 21:29 1818如果你已经成功的跟随并理解了所有的教程,可能你还是需要得到更好 ... -
ivy中文参考文档(21)-ant任务(9)-post resolve tasks
2009-09-15 14:17 14671) post resolve tasks ... -
ivy中文参考文档(20)-ant任务(8)-cachefileset
2009-09-03 23:11 13941) cachefileset 为配置构建一个有iv ...
相关推荐
### Spring 3.1中文参考文档关键知识点解析 #### 第一部分:Spring框架概述 ##### 第1章:Spring Framework介绍 **1.1 依赖注入和控制反转** - **依赖注入**(Dependency Injection, DI)是一种设计模式,允许将...
### Spring3.1 中文参考文档关键知识点解析 #### 第一部分:Spring框架概述 ##### 第1章:Spring Framework介绍 **1.1 依赖注入与控制反转** 依赖注入(Dependency Injection,DI)和控制反转(Inversion of ...
Spring的中文参考文档涵盖了Spring 3.1版本的前四章内容,为我们深入理解Spring框架提供了详尽的资料。 在Spring Framework介绍章节中,首先对Spring框架的依赖注入(DI)和控制反转(IoC)原则进行了阐述。依赖...
《Kotlin 官方参考文档 中文版》PDF 是一份详尽且全面的资源,旨在帮助开发者深入理解和掌握 Kotlin 编程语言。这份文档涵盖了 Kotlin 的所有核心概念、语法特性以及高级用法,是学习和工作中不可或缺的工具。 1. *...
ANT中文文档为中文用户提供了详尽的指导,包括基本概念、任务使用、属性和条件控制,以及如何编写自定义任务等。这对于初学者和经验丰富的开发者来说都是非常宝贵的资源,能够帮助他们更高效地理解和应用ANT。 总的...
Ant是Apache软件基金会的一个开源项目,它是一款强大的构建工具,主要用在Java环境中,用于自动化构建、测试和部署Java应用程序。这个"ant中文帮助文档"是针对Ant的详细指南,旨在帮助开发者更好地理解和使用Ant的...
在"gradle中文文档"中,你可以找到关于Gradle的全面介绍,包括基本概念、核心概念、任务、依赖管理和插件系统等。以下是文档可能涵盖的一些关键知识点: 1. **基础概念**:理解Gradle的基本构建块,如项目、任务和...
`grails-doc-CN-1.0.rar` 文件包含的是 Grails 1.0 版本的中文参考文档,对于那些不熟悉英文文档或者想要深入了解 Grails 的中文用户来说,这是一个极其宝贵的资源。 文档主要涵盖以下几个关键知识点: 1. **...
以上内容概括了Spring Framework 4.25参考文档中的一些核心知识点,旨在帮助开发者快速理解和掌握Spring框架的基本概念、架构设计及最新版本的关键特性。这些知识点对于开发者来说非常重要,可以帮助他们更高效地...
Apache Shiro是一个开源的安全框架,用于简化身份验证、授权、企业会话管理和加密等...Shiro的设计旨在提供一个一致且直观的安全解决方案,而Shiro参考手册中文版正是为那些希望深入理解和使用Shiro的中文用户准备的。
《Gradle插件用户指南中文版》是一份详尽的开源文档,旨在帮助开发者更好地理解和使用Gradle构建系统。Gradle是一种强大的、基于任务的构建自动化工具,广泛应用于Java和其他编程语言的项目中。这份中文翻译版使得更...
这些内容覆盖了Spring框架的基础概念、主要模块介绍、使用场景以及Spring 4.x版本的一些新特性介绍。对于开发者来说,深入了解这些知识点有助于更好地掌握Spring框架的使用技巧,提高开发效率。
Shiro的主要功能包括: 1. 身份验证(Authentication):这是Shiro安全框架中的一个核心功能,用于验证用户是否是其所声称的个体。例如,用户提交用户名和密码后,Shiro会对这些凭证进行检查,如果验证通过,则表示...
1. **Grails基础**:首先,你需要了解Grails的基础概念,如其构建系统、依赖管理(通过Ivy或Gradle)以及Groovy语言的基本语法。Groovy是Java平台上的动态语言,它简化了Java的许多语法,使代码更简洁易读。 2. **...
Spring Framework 4.3.4版本文档是一份针对Spring框架的详细参考资料,该框架由Rod Johnson、Juergen Hoeller、Keith Donald、Colin Sampaleanu、Rob Harrop等众多作者编撰。文档旨在为使用Spring开发应用程序的...