Nexus搭建自己的Maven私服

简介

Nexus是Maven仓库管理器,管理开发所需要的构件。如果你每次都是从Apache提供的Maven中央仓库去下载所需要的构件,那么这通常不是一个好的做法,应该在本地架设一个Maven仓库服务器,再代理远程仓库的同时维护本地仓库,以节省带宽和时间,那么Nexus可以满足这样的需求。

此外Nexus还提供了强大的仓库管理功能,构件搜索功能,基于Restful客户端,占用较少的内存。

基于简单的文件系统而非数据库,这些优点使其日趋成为最流行的Maven仓库管理器。

下载

Nexus的官方地址:

下载最新的版本,目前最新版本为:

nexus-3.2.0-01-mac.tgz

nexus-3.2.0-01-unix.tar.gz

nexus-3.2.0-01-win64.zip

根据自己的操作系统选择安装包,我的电脑是ubuntu系统,所以我下载的是nexus-3.2.0-01-unix.tar.gz,解压到任意目录,获得目录结构:

|--nexus-3.2.0-01是Nexus的服务主目录

|--sonatype-work是真正的仓库 

启动

Nexus需要依赖java环境,Java的安装这里就不做说明了,需要注意的是,官方已经明确说明,nexus3.x版本的运行环境需在java8的环境下。

如果需要修改Nexus服务端口或IP,端口配置在/ nexus-3.2.0-01/etc/ nexus-default.properties

在/ nexus-3.2.0-01/bin下找到nexus执行./nexus run &启动服务。

nexus支持如下命令:{start|stop|run|run-redirect|status|restart|force-reload}

Nexus的配置需要用admin角色完成,默认密码是admin123,进入首页之后,在右上角进行登录。

配置

Nexus里可以配置3种类型的仓库,分别是proxy,hosted,group。

1. Proxy是远程仓库的代理:比如说在Nexus中配置了central repository的proxy,当用户向这个proxy请求一个构件时,这个proxy就会先在本地查找,如果找不到的话,再去远程仓库下载,返回给用户。相当于一个中转的作用。

2. Hosted是宿主仓库:用户可以把一些自己的构件,deploy到hosted中。

3. Group是仓库组:在Maven里没有这个概念,是Nexus特有的,目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要配置多个地址,只要统一配置group地址就可以了。

配置Repository

1. Central Repository的proxy可能就是最关键的一个配置,因为绝大部分构件都是通过这个proxy得到的。在安装完Nexus,这个proxy是预置的,代理了远程服务,网上有一些其他公开的Maven仓库,可以用同样的办法,在Nexus中配置Proxy(如下图maven-public)。

2. Hosted Repository一般会配置3个,分别是3rd party,snapshots,releases,分别用来保存第三方的jar,公司内部jar包的快照,公司内部的发布版(如下图maven-releases,maven-snapshots)。

3. Group Repository是一个虚拟的仓库,通过对实体仓库聚合对外暴露统一的地址(如下图maven-public)。

到这里nexus的基本配置就结束了,当然上面介绍的都是最最基本的配置,nexus的功能非常强大。2.x和3.x的差别也是非常大,3.x版本更增加了对 Docker,NuGet,npm,Bower的支持,全面升级了页面,增加管理接口以自动管理任务,性能和用户体验也都有所改善。

使用

这里介绍一下本地Gradle工程下如何使用刚搭建起来的Nexus私服

在build.gradle里面配置:

repositories {    maven { url :8081/repository/maven-public }}

在gradle.properties里面配置

nexusUrl=:8081nexusUsername=adminnexusPassword=admin123

并在build.gradle里面加入

uploadArchives {    repositories {        apply plugin: maven        mavenDeployer {            repository(url: "${nexusUrl}/repository/maven-releases/") {                authentication(userName: nexusUsername, password: nexusPassword)            }            snapshotRepository(url: "${nexusUrl}/repository/maven-snapshots") {                authentication(userName: nexusUsername, password: nexusPassword)            }        }    }}

刷新gradle项目,可以看到发布包的gradle task,如图。

此时针对gradle使用nexus私服的基本配置已经完成,可以正常下载包,并且发布snapshot及release包。

参考官方资料:

本文作者:孙刚(点融黑帮),LoanBusiness Team 软件开发工程师,平时喜欢看看电影玩玩游戏,标准程序猿一枚。