Chapter 16. 仓库管理器

16.1. 简介

仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。

代理Maven仓库有很多好处。对于一开始使用Maven的情况来说,通过为所有的来自中央Maven仓库的构件安装一个本地的缓存,你将加速组织内部的所有构建。如果有开发人员想要下载 Spring Framework 的2.5版本,并且你在使用Nexus,那些依赖(以及依赖的依赖)只需要从远程仓库下载一次。如果有一个高速的 Internet 网络连接,这看起来没什么大不了,但是如果你一直要求你的开发人员去下载几百兆的第三方依赖,那么真正节省的时间将会是Maven检查依赖新版本以及下载依赖的时间。通过本地仓库提供Maven依赖服务可以节省数百的HTTP请求,在大型的多项目构建中,这样可以为一次构件节省几分钟的时间。

除了简单的时间和带宽的节省,仓库管理器为组织提供了一种控制Maven下载的机制。你可以详细的设置从公开仓库包含或排除特定的构件。能够控制从核心Maven仓库的下载对于很多组织来说是经常是一个必要前提,它们需要维护一个组织中使用依赖的严格控制。一个想要标准化某个如Hibernate或者Spring依赖版本的组织可以通过在仓库管理器中仅仅提供一个特殊版本的构件来加强这种标准。还有一些组织可能关心确保所有外部的依赖拥有和组织的法律规范相容的许可证。如果一个企业生产了一个分发应用程序,它们可能想要确定没有人不小心添加了一个涉及GPL许可证的依赖。仓库管理器为那些需要确信总体架构和政策实施的组织提供了这一层次的控制。

除了控制对远程仓库的访问以外,仓库管理器也为Maven的全面使用提供了一些很至关重要的东西。除非你希望你组织的每一个成员下载并构建一个单独的内部项目,否则你会希望为开发人员和部门之间提供一种共享内部项目构件的快照版本和发布版本的机制。Nexus为你的组织提供了这样的部署目标。在你安装了Nexus之后,你可以开始使用Maven让它部署快照版和发布版至一个由Nexus管理的定制仓库。

16.1.1. Nexus历史

Tamas Cservenak 在2005年12月开始为Proximity工作,当时他正想办法将它自己的系统和由Hungarian ISP提供的慢得难以置信的ADSL连接隔离开。Proximity以一个简单web应用的形式启动,用来为有网络连接问题的小型组织代理构件。为Maven构件创建一个对中央核心仓库的本地的命令驱动的缓存,能让组织访问来自中央核心仓库的构件,而且它同时也能确保这些构件不会通过很慢的ADSL连接来下载,要知道很多开发人员在使用这个连接。在2007年,Sonatype请求Tamas帮助创建一个类似的名为Nexus的产品。Nexus目前可以被认为是Proximity逻辑上的下一个步伐。

Nexus目前有一个活动的开发团队包括Tamas Cservenak,Max Powers,Dmitry Platonoff 和Brian Fox。Nexus的关于索引的部分代码也同时在m2eclipse中被使用,这些代码目前由Eugene Kuleshov开发。