Nexus 是Maven仓库管理器,若是你使用Maven,你能够从Maven中央仓库 下载所须要的构件(artifact),但这一般不是一个好的作法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就能够知足这样的须要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优势使其日趋成为最流行的Maven仓库管理器。web
你能够从http://nexus.sonatype.org/downloads/ 下载最新版本的Nexus,笔者使用的是1.3.0版本。数据库
Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中便可使用。apache
解压nexus-webapp-1.3.0-bundle.zip 至任意目录,如D:\dev_tools ,而后打开CMD,cd至目录D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32 ,运行Nexus.bat 。你会看到Nexus的启动日志,当你看到“Started SelectChannelConnector@0.0.0.0:8081”以后,说明Nexus启动成功了,而后打开浏览器,访问http://127.0.0.1:8081/nexus,你会看到以下的页面:windows
要中止Nexus,Ctrl+C便可,此外InstallNexus.bat能够用来将Nexus安装成一个windows服务,其他的脚本则对应了启动,中止,暂停,恢复,卸载Nexus服务。浏览器
你须要有一个能运行的web容器,这里以Tomcat为例,加入Tomcat的安装目录位于D:\dev_tools\apache-tomcat-6.0.18 ,首先咱们将下载的nexus-webapp-1.3.0.war 重命名为nexus.war ,而后复制到D:\dev_tools\apache-tomcat-6.0.18\webapps\nexus.war ,而后启动CMD,cd到D:\dev_tools\apache-tomcat-6.0.18\bin\ 目录,运行startup.bat 。一切OK,如今能够打开浏览器访问http://127.0.0.1:8080/nexus,你会获得和上图同样的界面。tomcat
要管理Nexus,你首先须要以管理员身份登录,点击界面右上角的login,输入默认的登陆名和密码:admin/admin123,登录成功后,你会看到左边的导航栏增长了不少内容:服务器
这里,能够管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。你会看到Nexus的功能十分丰富和强大,本文,笔者只介绍一些最基本的管理和操做。app
点击左边导航栏的Repositories,界面的主面板会显示全部一个全部仓库及仓库组的列表,你会看到它们的Type字段的值有group,hosted,proxy,virtual。这里咱们不关心virtual,只介绍下另外三种类型:webapp
由此咱们知道,咱们须要配置一个Maven中央仓库的proxy,其实Nexus已经内置了Maven Central,但咱们须要作一些配置。点击仓库列表中的Maven Central,你会注意到它的Policy是release,这说明它不会代理远程仓库的snapshot构件,这是有缘由的,远程仓库的snapshot版本构件不稳定且不受你控制,使用这样的构件含有潜在的风险。而后咱们发现主面板下方有三个Tab,分别为Browse,Configuration和Mirrors,咱们点击Configuration进行配置,你如今须要关心的是两个配置项:“Remote Storage Location”为远程仓库的地址,对于Maven Central来讲是http://repo1.maven.org/maven2/;“Download Remote Indexes”顾名思义是指是否下载远程索引文件,Maven Central的该字段默认为False,这是为了防止大量Nexus无心识的去消耗中央仓库的带宽(中央仓库有大量的构件,其索引文件也很大)。这里咱们须要将其设置为True,而后点击Save。在Nexus下载的中央仓库索引文件以后,咱们就能够在本地搜索中央仓库的全部构件。下图展现了咱们刚才所涉及的配置:maven
这里咱们再举一个例子,咱们想要代理Sonatype的公共仓库,其地址为:http://repository.sonatype.org/content/groups/public/。步骤以下,在Repositories面板的上方,点击Add,而后选择Proxy Repository,在下方的配置部分,咱们填写以下的信息:Repository ID - sonatype;Repository Name - Sonatype Repository;Remote Storage Location - http://repository.sonatype.org/content/groups/public/。其他的保持默认值,须要注意的是Repository Policy,咱们不想代理snapshot构件,缘由前面已经描述。而后点击Save。配置页面以下:
Nexus预约义了3个本地仓库,分别为Releases,Snapshots,和3rd Party。这三个仓库都有各自明确的目的。Releases用于部署咱们本身的release构件,Snapshots用于部署咱们本身的snapshot构件,而3rd Party用于部署第三方构件,有些构件如Oracle的JDBC驱动,咱们不能从公共仓库下载到,咱们就须要将其部署到本身的仓库中。
固然你也能够建立本身的本地仓库,步骤和建立代理仓库相似,点击Repository面板上方的Add按钮,而后选择Hosted Repository,而后在下方的配置面板中输入id和name,注意这里咱们再也不须要填写远程仓库地址,Repository Type则为不可修改的hosted,而关于Repository Policy,你能够根据本身的须要选择Release或者Snapshot,如图:
Nexus中仓库组的概念是Maven没有的,在Maven看来,无论你是hosted也好,proxy也好,或者group也好,对我都是同样的,我只管根据groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus可以将多个仓库,hosted或者proxy合并成一个group,这样,Maven只须要依赖于一个group,便能使用全部该group包含的仓库的内容。
Nexus预约义了“Public Repositories”和“Public Snapshot Repositories”两个仓库组,前者默认合并全部预约义的Release仓库,后者默认合并全部预约义的Snapshot仓库。咱们在本文前面的部分建立了一个名为“Sonatype Repository”的仓库,如今将其合并到“Public Repositories”中。
点击仓库列表中的“Public Repositories”,而后选择下方的"Configuration" Tab,在配置面板中,将右边“Avaiable Repositories”中的“Sonatype Repository”拖拽到左边的“Ordered Group Repository”中,如图:
建立仓库组和建立proxy及hosted仓库相似,这里再也不赘述。须要注意的是format字段须要填写“maven2”,添加你感兴趣的仓库便可。
在浩大的Maven仓库中一下下点击连接,浏览路径以寻找感兴趣的构件是一件很郁闷的事情。Nexus基于nexus-indexer提供构件搜索功能,要想对仓库进行搜索,不管是hosted,proxy,或者group,你都必须确认索引文件存在。这一点对于代理仓库尤为重要,有些远程仓库可能根本就没有索引,因此你没法搜索这些代理仓库。有些远程仓库的远程索引很是大,如中央仓库达到了70M左右,那么第一次下载索引须要花不少时间,因此要指望获得搜索结果,确保看到以下的文件:
一旦你的Nexus拥有了本地或者远程仓库的索引文件,你就能够享受Nexus的构件搜索功能了。不论登录与否,你均可以使用关键字进行模糊搜索,好比我在左边导航栏上部的搜索框内输入junit,而后点击搜索按钮,右边马上会分页显示500多条的junit相关构件信息。若是你了解更多的信息,你也能够经过限定groupId,artifactId,version进行搜索,点击导航栏中的“Advanced Search”,点击右边全部页面左上角的下拉框,选择“GAV Search”。笔者这里输入junit:junit:4.4,而后回车:
选择一项搜索结果,在页面下方会显示“Artifact Information”的面板,你能够点击"artifact"或者"pom"下载对应文件,而该面板右边更显示了一个Maven依赖配置,你能够直接复制该配置到Maven POM中,这是个十分方便的特性。
此外,值得一提的是,Nexus还支持基于classname的搜索,你只需点击搜索页面右上角的下拉框,选择“Classname Search”,而后输入类名便可,这里我再也不赘述。
默认状况下,Maven依赖于中央仓库,这是为了能让Maven开箱即用,但仅仅这么作明显是错误的,这会形成大量的时间及带宽的浪费。既然文章的前面已经介绍了如何安装和配置Nexus,如今咱们就要配置Maven来使用本地的Nexus,以节省时间和带宽资源。
咱们能够将Repository配置到POM中,但通常来讲这不是很好的作法,缘由很简单,你须要为全部的Maven项目重复该配置。所以,这里我将Repository的配置放到$user_home/.m2/settings.xml中:
因为咱们不能直接在settings.xml中插入<repositories>元素,这里咱们编写了一个profile,并添加了一个profile并使用<activeProfile>元素自动将这个profile激活。这里的local-nexus仓库指向了刚才咱们配置的Nexus中“Public Repositories”仓库组,也就是说,全部该仓库组包含的仓库都能供咱们使用。此外,咱们经过<releases>和<snapshots>元素激活了Maven对于仓库全部类型构件下载的支持,固然你也能够调节该配置,好比说禁止Maven从Nexus下载snapshot构件。
使用该配置,Maven就会从你的Nexus服务器下载构件了,速度和从Central下载可不是一个数量级的。
Nexus提供了两种方式来部署构件,你能够从UI直接上传,也能够配置Maven部署构件。
有时候有个jar文件你没法从公共Maven仓库找到,可是你能从其它获得这个jar文件(甚至是POM),那么你彻底能够将这个文件部署到Nexus中,使其成为标准流程的一部分。步骤以下:
点击左边导航栏的"Repository",在右边的仓库列表中选择一个仓库,如“3rd Party”,而后会看到页面下方有四个tab,选择最后一个“Upload”,你会看到构件上传界面。选择你要上传的构件,并指定POM,(或者手工编写GAV等信息),最后点击Upload,该构件就直接被部署到了Nexus的"3rd Party"仓库中。如图:
更常见的用例是:团队在开发一个项目的各个模块,为了让本身开发的模块可以快速让其余人使用,你会想要将snapshot版本的构件部署到Maven仓库中,其余人只须要在POM添加一个对于你开发模块的依赖,就能随时拿到最新的snapshot。
如下的pom.xml配置和settings.xml能让你经过Maven自动化部署构件:
pom.xml
settings.xml
这里咱们配置全部的snapshot版本构件部署到Nexus的Snapshots仓库中, 全部的release构件部署到Nexus的Releases仓库中。因为部署须要登录,由于咱们在settings.xml中配置对应Repository id的用户名和密码。
而后,在项目目录中执行mvn deploy ,你会看到maven将项目构件部署到Nexus中,浏览Nexus对应的仓库,就能够看到刚才部署的构件。当其余人构建其项目时,Maven就会从Nexus寻找依赖并下载。
本文介绍强大的仓库管理器——Nexus,包括如何下载安装Nexus,配置Nexus代理中央仓库,管理Nexus的代理仓库,本地仓库,以及仓库组。并帮助你了解如何经过Nexus搜索构件。最后,如何在Maven中配置Nexus仓库,以及如何部署构件到Nexus仓库中。这些都是Nexus中最基本也是最经常使用的功能。随着使用的深刻,你会发现Nexus还有不少其它的特性,如用户管理,角色权限管理等等。
Nexus的OSS版本是彻底开源的,若是你有兴趣,你能够学习其源码,甚至本身实现一个REST客户端。
立刻拥抱Nexus吧,它是免费的!