Nexus是Maven仓库管理器,管理开发所需要的构件。如果你每次都是从Apache提供的Maven中央仓库去下载所需要的构件,那么这通常不是一个好的做法,应该在本地架设一个Maven仓库服务器,再代理远程仓库的同时维护本地仓库,以节省带宽和时间,那么Nexus可以满足这样的需求。
此外Nexus还提供了强大的仓库管理功能,构件搜索功能,基于Restful客户端,占用较少的内存。
基于简单的文件系统而非数据库,这些优点使其日趋成为最流行的Maven仓库管理器。
下载
Nexus的官方地址:http://www.sonatype.org/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是预置的,代理了远程服务https://repo1.maven.org/maven2/,网上有一些其他公开的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'http://localhost:8081/repository/maven-public'}
}
在gradle.properties里面配置
nexusUrl=http://localhost:8081
nexusUsername=admin
nexusPassword=admin123
并在build.gradle里面加入
uploadArchives {
repositories {
applyplugin:'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包。
参考官方资料:https://books.sonatype.com/nexus-book/reference3/index.html
本文作者:孙刚(点融黑帮),LoanBusiness Team 软件开发工程师,平时喜欢看看电影玩玩游戏,标准程序猿一枚。