私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用,如图6-2所示。
图6-2 私服的用途
图6-2展示的是组织内部使用私服的情况。即使在一台直接连入Internet的个人机器上使用Maven,也应该在本地建立私服。因为私服可以帮助你:
·节省自己的外网带宽。建立私服同样可以减少组织自己的开支,大量的对于外部仓库的重复请求会消耗很大的带宽,利用私服代理外部仓库之后,对外的重复构件下载便得以消除,即降低外网带宽的压力。
·加速Maven构建。不停地连接请求外部仓库是十分耗时的,但是Maven的一些内部机制(如快照更新检查)要求Maven在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外部远程仓库的时候,构建的速度会被大大降低。使用私服可以很好地解决这一问题,当Maven只需要检查局域网内私服的数据时,构建的速度便能得到很大程度的提高。
·部署第三方构件。当某个构件无法从任何一个外部远程仓库获得,怎么办?这样的例子有很多,如组织内部生成的私有构件肯定无法从外部仓库获得、Oracle的JDBC驱动由于版权因素不能发布到公共仓库中。建立私服之后,便可以将这些构件部署到这个内部的仓库中,供内部的Maven项目使用。
·提高稳定性,增强控制。Maven构建高度依赖于远程仓库,因此,当Internet不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。使用私服后,即使暂时没有Internet连接,由于私服中已经缓存了大量构件,Maven也仍然可以正常运行。此外,一些私服软件(如Nexus)还提供了很多额外的功能,如权限管理、RELEASE/SNAPSHOT区分等,管理员可以对仓库进行一些更高级的控制。
·降低中央仓库的负荷。运行并维护一个中央仓库不是一件容易的事情,服务数百万的请求,存储数T的数据,需要相当大的财力。使用私服可以避免很多对中央仓库重复的下载,想象一下,一个有数百位开发人员的公司,在不使用私服的情况下,一个构件往往会被重复下载数百次;建立私服之后,这几百次下载就只会发生在内网范围内,私服对于中央仓库只有一次下载。
建立私服是用好Maven十分关键的一步,第9章会专门介绍如何使用最流行的Maven私服软件——Nexus。