【题目】使用ivy构建jar包的依赖关系
【提要】
1 要解决的问题
2 关于网络上的repository介绍
3 Maven和Ivy的工作原理和比较
4 ivy运行环节的配置
5 配置中的细节问题
【内容】
1 要解决的问题
使用java架构的开源框架最为头痛的事情就是要面对一大堆相互之间存在依赖关系的jar包。有以下几个原因造成了它们之间关系的复杂性:
首先,jar包之间的依赖关系是有传递性的,即A.jar依赖B.jar而B.jar又依赖C.ja,以此类推……,这样要使用A.jar就必须找到所有与之有直接或间接的依赖关系的jar包;
其次,是依赖关系与jar包的不同版本密切相关,例如hibernate-3.2.6.ga.jar依赖asm-1.5.3.jar,而spring-2.0.6.jar依赖asm-2.2.3.jar,必须解决两个不同版本的asm之间的版本冲突;
其三是一个开源框架往往是一组jar包的组合,而框架间的依赖关系分为许多不同情况下的依赖,如:编译时依赖、运行时依赖、测试依赖等,不同状态下需要取用不同的jar包文件;
其四是jar包的下载、升级和管理,一个框架中jar包间达成的依赖关系可能是非常复杂的!管理这些jar包不胜其烦,一个jar包的升级可能导致必须升级更替一系列的jar包文件。
2 关于网络上的repository介绍
maven2出现部分地解决了上述问题,它的思想就是自动解决jar的依赖关系问题,它和IVY一样是一个关于项目构建和测试的管理工具,理解这类工具的工作原理,首先要了解网上开源社区里面的所谓repository(仓库)系统,它和maven是配套使用的,粗略看起来,可以理解为一个在远程服务器上的一个大型的、包括了各种各样的jar文件的下载服务器,但是它绝不像下载服务器那样简单,我们可以实际看看它的结构:
2.1 可供下载jar包的地址(即:maven.repo.remote)的几个镜像站点
http://www.apache.org/dist/java-repository/
http://apache.binarycompass.org/java-repository/
http://www.bluesunrise.com/maven/
http://fisheye5.cenqua.com/browse/glassfish/repo/
http://dist.codehaus.org/
http://source.concord.org/repository/
http://www.ganet.org/maven/