Nexus是谷歌手机的一个牌子,我们要介绍的不是Nexus,而是Sonatype Nexus。它是Sonatype公司的一个产品,叫Nexus,它是Maven的私服。事实上有三种专门的Maven仓库管理软件可以帮助我们创建私服,有Apache的Archiva;JFrog的Artifactory和Sonatype的Nexus。其中Archiva是开源的,Artifactory和Nexus的核心也是开源的。这里我们重点介绍Sonatype公司的Nexus。
看一下百度百科对私服的介绍:
我不玩游戏,对游戏的私服也不是很了解,我们这里所说的私服跟游戏的私服还不一样。我把它解释为私人服务器。Maven的内容上篇博客我们已经介绍了,【项目管理】项目管理工具Maven,而为什么要在Maven中用私服呢?呵呵,这是个问题,我们下面就好好介绍一下Sonatype Nexus,Maven的私人服务器。
其实要说Nexus,它并不是Maven的核心内容,而是两个相互独立的东西。但是Nexus的产生确实是跟Maven有渊源的。说是私服,其实Nexus就是Maven的一个远程仓库。上篇博客我们介绍了Maven的本地仓库和*仓库,那么Nexus是什么样的仓库呢?
其实这个是之前困扰我的一个问题,我理解了本地仓库了*仓库,知道一个项目需要插件的时候会先去本地仓库找,如果本地仓库没有就会去*仓库找,找到后下载到本地仓库中再使用。但是Nexus的出现,让我傻傻搞不清楚本地仓库和Nexus的区别。本地仓库是保存从*仓库(远程仓库)下载下来的插件;Nexus也是保存从*仓库下载下来的插件,那么从*仓库下载下来的插件是选择保存在本地仓库?还是Nexus?还是连个地方各保存一份呢?带着这样的疑问,我开始进一步的了解Nexus。
深入了解后我才发现,原来Nexus也是远程仓库的一种,它是架设在局域网内的仓库服务。这里我称之为远程仓库,是为了跟*仓库区分开来,因为原来的理解有问题,*仓库是Sonatype公司出资维护的,我们把它想象成是一个无比巨大,物产丰富的大库,而这个库置于最外层;我们所说的Nexus置于*仓库和本地仓库之间,Nexus之所以称为是一种特殊的远程仓库,是为了节省宽带和时间,在局域网内架设的一个私有的仓库服务器,它代理广域网上的所有的*仓库,供局域网内的Maven用户使用。
打个比方,就好比外部所有的“*仓库”是一个大的油库,里面有特别多的资源。自己家有个油壶,负责装油拿在家炒菜,家里的这个小油壶就是“本地仓库”。但是用小油壶去大油库里盛油,中间要走很多路,花费很多钱(这里指占用的网络流量和时间),所以想着在中间建立一个小的中转站——商店,把油放到油桶里(指Nexus)。这样,外部的所有油库都可以把油放到商店的油桶中,居民根据需要可以拿着油壶直接去商店打油了。这样一来,你明白Nexus的作用了么?
所以,当项目中需要某些插件时,它会先去本地仓库中寻找,如果没有,从私服Nexus请求,如果私服Nexus不存在该插件,则从外部的*仓库中下载,缓存到Nexus上之后,再下载到本地仓库*项目使用。除此之外,一些无法在*仓库下载下来的插件也能从本地上传到私服Nexus*大家使用。
一些关于Nexus的详细配置以及细的知识点,详情可以参考我的这篇博客:maven+nexus环境搭建。作为一个Nexus的入门,这篇博客就介绍到这里,不过作为Maven配合使用的Nexus,它已经成为当今最流行的Maven仓库管理软件。有什么问题欢迎在下方留言!