ivy中文参考文档(6)-最佳实践(上)

这里有一些我们从我们的经验和一些客户的顾问工作中收集到的建议和最佳实践。

1) 为所有的模块添加模块描述符

在ivy的世界种,模块描述符是ivy文件的一种,基本上是简单的xml文件,用来描述模块生产什么作为制品和它的依赖。

为你的开发涉及到的所有模块编写或者下载模块描述符是一个好习惯,甚至是为你的第三方依赖,哪怕他们不提供他们自己的模块描述 符。

开始这将看上去像是一个额外的工作,并且需要时间。但是当你拥有多个模块同时使用相同的第三方类库,你仅仅需要在你的ivy文件 中添加一行就可以得到这个类库和它特有的你真正需要的依赖(如果你的仓库中有正确的模块描述符,尤其是和模块配置一起使用)。当你 想更新一个依赖时它将非常有帮助。在你的模块的 ivy文件中一个简单的修改就可以得到更新过的版本和它更新(或者没有)过的依赖。

因此我们推荐在你的仓库中为所有的模块添加ivy文件,你甚至可以通过设置你的解析器上的allownomd 属性为false来强制执行这个规 则。你不需要使用依赖制品的包含/排除/specification这些ivy特性,这些仅仅可以用于非常特殊的情况。

2) 使用自己的企业仓库

对于开源项目而言这通常不是一个正确的建议,但是对于企业世界我们强烈建议遮掩做来避免依赖一个公共的仓库类似mave ibiblio 或者ivyrep.为什么? 好,这里有一堆理由:

1.控制

对于公共仓库最主要的问题在于你没有仓库的控制权。这意味着如果一个模块描述符损坏,你不能轻易的修复它。当然你可以使用一个 由共享仓库和公共仓库组成的链,并且将你修复后的模块描述符放置到共享仓库以便它能隐藏公共仓库,但是这会导致仓库浏览和维护的 麻烦。

更多的问题在于仓库可能的更新。我们知道在仓库中发布的版本应该保持稳定并且不要更新,但是我们也频繁的看到模块描述符有很多 bug,或者制品被损坏。甚至某些时候我们看到一个新的版本使用和之前版本相同的名字发布,因为前一个版本只不过是被错误打包。这种 情况设置发生在最好的东西上,比如我们的 ivy1.2 :-)。 后来我们决定发布一个新的使用不同名字1.2a的版本。但是如果仓库管理员容 许类似的更新,这意味着以前的工作可以被打破。这将破坏你的构建的可再现性。

2.可靠性

mave仓库的可靠性并不是很好(我们经常体验到非常慢的速度,甚至完全无法访问),同时ivyrep仅仅被一个小公司支持(是的,我们仅 仅是一个小公司).因为速度慢和网站挂起的情况会同样发生。并且如果你依赖的仓库倒下,这将导致你的开发或者发布过程严重减缓。

3.准确性

公共的仓库通常包含远比你实际需要多的东西。这是一个问题吗?我们是这样想的。我们认为在一个企业环境中你使用的类库在被你的 公司的每个项目使用前需要有一些验证过程。而做这个事情做好的方式是什么?建立一个仅仅包含你实际需要使用的类库的企业仓库。这 将不仅仅可以保证你的运用依赖有更好的质量,而且帮助你在每个地方使用相同的版本,甚至可以再申明你的模块依赖时得到帮助。如果你 使用类似ivyde的工具,代码自动完成会紧紧显示你仓库的恰当信息,和你实际需要使用的类库。

4.安全

从模块仓库瞎子啊的制品通常是可执行的,这将牵扯到安全问题。想象一个黑客用一个包含病毒的版本替换commons-lang?如果你依赖 公共仓库来构建你的软件,它将有安全方面的风险。你在这里看到可以看到更多的相关信息 Forrester article。

注意,不是说因为要使用企业仓库就不得不彻底的通过手工来构建。ivy有一个安装任务可以被用来从一个仓库安装模块到另外一个, 因此它可以用来有选择的从公共仓库安装模块到你的企业仓库,这里你将有能力确保控制,可靠性和准确性。

3) 至少在组织和模块上使用模式

ivy非常灵活并且通过使用模式的概念可以适应很多现存的仓库。但是如果你的仓库现在还不存在,我们强烈建议总是在你的模式中使 用组织和模块名,甚至是你仅仅放置你自己的模块的私有仓库(这里所有的组织都是相同的)。为什么?因为ivy listing feature(清单特 性?)依赖在模式中找到的标记。如果你的模式中没有组织标记,ivy将不能列出你仓库中的组织。举例说对于在ivyde中的代码自动完成这 将是一个问题,同样对于仓库范围的任务如安装和仓库报告也是如此。

4) 为公共仓库发布ivysettings.xml

如果你创建了一个公共仓库,请提供一个ivysettings.xml对应的URL地址。这很容易做到,如果有人想leverage你的仓库,他仅仅需要 设置这个你的ivysettings.xml的URL就可以装载它,或者在它自己的配置文件中包含它,这使得联合多个公共仓库变得十分容易。

时间: 2024-08-30 10:13:21

ivy中文参考文档(6)-最佳实践(上)的相关文章

ivy中文参考文档(7)-最佳实践(下)

5) 处理集成版本 当工作在一个团队中或者多个模块时,你需要依赖中间的没有完成的模块版本.这些版本我们称之为集成版本,因为他们主要的目标就 是和其他模块集成来构成或者测试一个运用或者框架. 如果你在模块开发过程中欧那个遵循持续集成的规范,这些集成版本可以被持续集成服务器非常频繁的产生. 因此,如何处理这些可能数量繁多的集成版本呢? 主要有两种方法可以处理它们,ivy目前都支持: 1. 使用命名约定如一个特殊的后缀 这个主意非常简单,每次你发布你的模块的一个新的集成你使用相同的名字给这个版本(例如

ivy中文参考文档(3)-主要概念(上)

英文原文:http://ant.apache.org/ivy/history/2.1.0-rc1/concept.html 因内容太长而拆分,下面是第一部分: 一. 依赖解析器 依赖解析器是ivy中使用的可插入是的类: * 发现ivy文件中的依赖 * 下载依赖的制品 制品下载的概念很大:制品可以在网站上,或者在你机器上的本地文件系统上.下载是从仓库取文件放到ivy缓存的行为. 而且,解 析器的职责是找到ivy文件并下载制品,这有助于实现不同的解析策略. 如你所见,依赖解析器可以被认为是负责描述仓

ivy中文参考文档(1)-目录

欢迎使用ivy参考文档,如果你完全不了解ivy,请在深入阅读这份参考文档之前,简单了解一下它的特性,FAQ和教程. 参考概要: 这份文档被分解为以下几个部分 一. 介绍 1. 术语 (English / 中文) 这个部分介绍一些在ivy文档中到处使用的词语,例如组织,模块,配置,设置 2. 主要概念 (English / 中文 上/下) 这个部分介绍ivy中使用的主要概念:依赖解析器,变量,表达式,另外还有还对ivy的主要 概念---模块配置做了良好介绍. 3. ivy如何工作 (English

ivy中文参考文档(10)-ivy文件

1) ivy文件 ivy的使用完全是基于以"ivy文件"著称的模块描述符.ivy文件是xml文件,通常被称为ivy.xml,包含模块依赖的描述,它发布的制品 和它的配置. 这里有一个最简单的ivy文件: <ivy-module version="2.0"> <info organisation="myorg" module="mymodule" /> </ivy-module> 如果你想知道

ivy中文参考文档(5)-ivy如何工作

前面已经介绍了ivy主要的术语和概念,现在是时候说明ivy如何工作的了. 不同位置下模块的通常周期 文档(5)-ivy如何工作-spring4 中文参考文档"> 更多细节请查考ant任务. 一. 配置 ivy需要配置以便能够解析依赖.这个配置通常是通过配置文件来完成的,配置文件定义了一系列的依赖解析器.每个解析器能够发现 ivy文件和/或制品,提供简单信息诸如组织,模块,修订版本,制品名字,制品类型和制品扩展名. 配置通常负责支出哪个解析器应该用于解析哪个模块.这个配置仅仅取决于你的环境,

ivy中文参考文档(17)-ant任务(5)-publish

1) publish 发行当前模块的制品和已解析的描述符(已交付的ivy文件). 这个任务的目的是发行当前模块描述符和它的声明的发行制品到仓库中. 所有制品必须在这个任务调用前创建.它不会自己创建制品,而是只期望能在制品正则表达式之处的地方找到他们. 目标仓库通过在当前ivy设置中声明的解析器的名字来给出.查阅设置文件来获取解析器支持制品发行的细节. 同时也发行已交付的ivy文件(除非你不想),并且甚至会deliver它,如果ivy文件没有在上一次delever调用时交付或者forcedeliv

ivy中文参考文档(9)-设置文件

1) 设置文件 为了如您所想的工作,ivy有时需要一些设置.实际上,ivy可以在完全没有任何特殊设置的情况下工作,查阅默认设置文档来获取相关 的更详尽的信息.但是ivy有能力在完全不同的上下文下工作.你只需要正确的配置它. 设置通过xml文件来指定,通常命名为called ivysettings.xml.为了在ant中配置ivy,你只需要用你的设置文件的路径来使用配置数 据类型. 这里有一个设置文件的例子: <ivysettings> <properties file="${i

ivy中文参考文档(4)-主要概念(下)

ivy中引入了一些自己的概念,了解并理会这些概念对ivy的学习使用是有帮助的.这里翻译一下官网的介绍ivy主要概念的文章,原文 在此:http://ant.apache.org/ivy/history/2.1.0-rc1/concept.html 因内容太长而拆分,下面是第二部分: 六. 冲突管理器 冲突管理器可以在冲突的模块修订本列表中选择需要保留的修订本. 如果修订本对应相同的模块,举例说相同的组织/模块名对,那么称为冲突的修订本列表. 可用的冲突管理器列表在可以冲突管理器页面可以得到. 想

ivy中文参考文档(21)-ant任务(9)-post resolve tasks

1) post resolve tasks 在ivy中有几个任务被认为是后解析任务(post resolve task),并相应地共享公用行为和设置. 这些任务是: * retrieve * cachefileset * cachepath * artifactproperty (since 2.0) * artifactreport (since 2.0) 所有这些任务都将自动触发resolve,如果: * 在当前构建中没有任何一个keep属性设置为true的任务被调用 * 组合和模块没有设置