初识 Ivy

1. 什么是Apache Ivy?

   Apache Ivy 是一个强大的依赖管理软件,它支持传递性依赖和其他更多的功能。

   使用Apache Ivy, 你可以在xml文件里定义自己的模块依赖关系,这个xml 文件就是ivy文件。然后你可以通过Apache Ivy将你需要的依赖包下载到本地的lib文件夹。

2. 为什么我们要使用依赖管理器?

如果没有依赖管理,我们通常有两种方式来存储工程的依赖关系:工程的lib文件夹或者直接访问共享库

使用lib文件夹最大的缺点在于如果有多个工程使用相同的依赖,那么这些依赖可能存在不同的地方。而且,我们经常会看到工程依赖项的修正并没有记录下来,这样就会有维护问题。

如果使用共享库,问题在于我们要经常维护工程的依赖项列表。而这项列表并不在build文件中,这也带来了维护的问题。而且这个解决方案经常要求下载整个库,除非使用了自己的依赖管理方案

这些解决方案的另一个主要缺点在于它们并没有使用传递性依赖。传递性依赖就是依赖关系的依赖关系。管理传递性依赖只要你声明你真正需要的依赖,而不是你使用的组件所需要的依赖。这不仅仅减轻了你的依赖声明,而且很大程度提高了工程的可维护性,尤其是在多项目的环境下。想象一下你开发了一个要使用在其他几个工程中使用的组件。在没有传递性依赖的情况下,那么每当你的组件需要一个新的依赖关系,你都要去更新所有使用你组件的工程!而这将会需要不少的时间!

3.为什么要使用Apache Ivy?

从Ivy的features 和Apache提供的产品比较里,你会发现Apache Ivy是当前可用的最好的依赖管理工具之一

4.Apache Ivy 和Apache Maven有什么不同?

 http://ant.apache.org/ivy/m2comparison.html

首先,也是最重要的不同之处:它们两个根本不是同一种工具

Apache Maven 是一种软件醒目关系的综合工具,然而Apache Ivy只是一个依赖管理工具,和流行的构建管理工具Apache Ant高度集成。所以更有趣的比较应该是比较Apache Ant+Ivy 和Apache Maven。但是这个已经超出了依赖管理的范围。

其次,它们两个有不同的思想

Apache Ivy 严重依赖一个独特的概念称为配置。在Apache Ivy里,一个模块配置是使用或者查看模块的一种方法。例如,你可以在你的模块测试和运行的配置,但是你也可以有mysql和oracle的配置,或者hibernate和jdbc的配置。在每一个配置里,你可以声明什么样的组件(jar,war,...)是必需的。同样在每一个配置里,你也可以声明对其他模块的依赖,描述你需要什么样的依赖配置。这叫做配置映射(configuration mapping),它是一种非常灵活的方法,可以用来回答我们经常在软件开发中所遇到的很多问题。

Apache Maven方面有它们称为scope的概念。你可以声明一个依赖作为测试scope的一部分,或者编译时的scope。然后根据这个scope你可以得到依赖组件(每个模块一个组件),而这个组件的依赖关系取决于他们的scope。Scope 是预定义的,你不能改变它们。无法创建一个oracle scope。No way to indicate you need what has been declared to be needed in the runtime scope of your dependency in your compile one. Everything here is written in the marble.

文档

能够很快上手并使用某个工具,它的文档是必不可少的。Apache Ivy的参考文档很多,涵盖了所有的特性并包括

很多例子。还提供了一些用新版本Ivy维护的官方教程以及从版本2.0.0-alpha2以后的在线的不同版本的文档。

Apache Maven, 很难清楚的知道什么可以被认为是依赖管理文档,只有很少的一部分:一些小的入门指南,pom条目指南。即使在可以免费得到的maven书里也没有很详细的讲解,如何理解依赖管理还是在于读者的个人观点。

冲突管理

冲突管理是依赖管理的重要一部分,当你处理传递性依赖时经常会碰到冲突。在这个领域,Apache Ivy让你做任何你想要的:在某个模块中使用冲突管理器,在其他地方,决定你将要得到哪一个版本,...你甚至可以在需要的时候插入你自己的冲突管理器

Apache Maven的冲突管理相当简单:获取最接近的定义?(the principle is to get the nearest definition)。

所以如果你的模块依赖于foo1.0, 如果你不修改你自己的依赖声明(dependency declaration),你的任何依赖关系都不会得到foo1.1. 这种方式也许在某些情况下可行,但是其他情况就不好说了...

灵活性

在Apache Ivy里,很多东西都是可配置的,还有其他一些是可以插入的:依赖解析器,冲突管理,最新修订策略...

Apache Maven也提供了可插入库,但是并不是很多。此外,哭的配置并没有Apache Ivy灵活:没有库连接,无法在多个库里分离原数据和组件(metadata and artifacts)...

公共存储库

Apache Maven 配置使用maven2 存储库,其中包含很多模块(both artifacts and module descriptors).

唯一的问题可能是模块描述符并不总是被检查过的,所以有些不是很好写。

Apache Ivy 兼容maven2原数据,默认使用的也是maven2的存储库。

然而我们并不推荐使用这样的一个公共存储库作为企业构建系统,而且Ivy 本身就提供了很多特性和文档去构建你自己的企业存储库,基于(或者不基于)公共存储库已有的数据


转载于:https://my.oschina.net/u/134516/blog/185288

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值