Maven仓库管理器的重要性

今天在maven主题的irc中得知,又一个中国的ip被中央Maven仓库 封了。原因我猜到了大半,但还是忍不住问一下,回答是:

他们消耗了很大的中央仓库带宽,会使之变慢。因此这些人不是良好的Maven公民。

我也曾经在个人笔记本上直接使用中央Maven仓库,第一次build项目下载了很多东西,可这样并没有被封,说明中央仓库不是很苛刻的,那么是什么样的下载量导致中央仓库的管理员受不了呢?我猜测是某个公司吧,很多人用Maven构建项目,但是自己没有建立一个仓库管理服务器,有太多的重复下载,直接导致占用了很大的带宽。

那么,请用Maven仓库管理器吧,为了别人,更为了自己。仓库管理器是干什么的?《Maven权威指南》中这样说明:

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

我略微解释下,首先它是代理,举个有点极端的例子,一百人的公司,每个人从公共Maven仓库下载100M的构件,那么消耗的带宽就是10G,开发者就难免会对着console的下载进程发愣,或者抱怨。还有,如果需要从5个公共仓库构件,那么每个开发者就需要自己配置POM或者settings,那么一共需要配置500次。最后,如果公司的IP对Maven中央仓库造成8G的下载量,那边的管理员为了能给更多人提供服务,只能无奈的封掉你的这个IP。因此这个公司需要维护一个Maven仓库管理器,它代理所有内部Maven的构件请求,并在服务器上维护一份缓存,该公司为所有的构件只向公共仓库请求一次,消耗公网带宽100M,内部请求完全通过LAN搞定,开发者看到进度条刷刷的闪,心情会比较好。此外,所有开发者只需要配置一个指向这个代理的仓库。公共服务器的配置,在仓库管理器维护,这也大大减少的时间。

Maven仓库管理器的第二个功能是,为组织提供一个部署构件的公共地址,以便共享。一个项目可能分割成5个模块,模块之间相互有依赖,有了仓库管理器,模块A的SNAPSHOT版本可以随时发布到内部仓库上,模块B就能很方便的得到最新的模块A构件。此外,release版本的构件也能很方便的发布,供QA测试等等。

如果不是一个人玩玩Maven而已,那么仓库管理器是必须的,Nexus 是一个比较强大的仓库管理器,Maven权威指南 中第十六章详细介绍了仓库管理器和Nexus,翻译内容将于近几日发布。

猜你喜欢

转载自juvenshun.iteye.com/blog/230713