Nexus搭建远程Maven仓库

Nexus搭建远程Maven仓库

一、简介

想必对于使用 JVM 平台语言的开发者而言已经对Maven很熟悉了,Maven是当下最流行的 JVM平台语言的构建工具之一。Maven除了是一款优秀的构建工具之外,得益于良好的社区,Maven仓库中也维护着大量优质的开源库,其它的一些构建工具比如AndroidStudio默认使用的Gradle也使用了Maven的仓库。

Maven仓库分为三种类型:

  • 本地仓库(local):存放在本地设备上,可以理解为本地缓存。

  • 中央仓库(central):由Maven社区维护,地址为https://repo1.maven.org/maven2/,背后出资维护的公司是Sonatype,本文主角——Nexus 也是由这家公司开发的。

  • 远程仓库(remote):即由开发人员自行定制的仓库,也就是俗称的Maven私服,本文将要搭建的个人Maven服务器就属于此种类型。一般互联网公司都会维护一个或多个公司内部的Maven服务器,用于放置公司内部的二方库。

额外补充介绍一类仓库:

  • 镜像仓库:这实际上不是真正意义上的一种分类,它的存在主要是为了解决由于各种原因而导致的中央仓库访问速度过慢的问题,实际上就是中央仓库的一份拷贝,例如国内的Maven阿里云仓库

为什么需要搭建远程仓库?

  • 因为中央仓库只能上传开源项目,而我们开发的一些库出于各种原因不需要开源,这时候就只能传到远程仓库中。
  • 互联网公司的二方库出于代码安全的考虑,会在公司内网部署远程Maven仓库,这些仓库只能从内网访问,外网无法访问,保证了代码的安全性。

二、Nexus为何物

Nexus是由Sonatype公司开发的Maven仓库管理软件,它为我们提供了非常简单地部署Maven仓库的方式,同时提供了一个后台管理界面,可以通过网页图形化界面清晰地管理仓库中存放的库,并通过管理员账号密码对权限进行了限制。

除了Nexus以外,还有另外两款流行的Maven仓库管理软件 Archiva 和 Artifactory 。其中Nexus较为主流且功能强大,并且是由Sonatype公司开发的,所以我们选择使用Nexus来搭建Maven远程仓库。

三、Linux安装Nexus

笔者使用的系统版本为 Ubuntu18.04,并且是通过Docker进行安装,若读者尚未安装Docker则需要先安装Docker。

步骤如下:

  1. 先拉取Nexus的Image文件

    docker pull docker.io/sonatype/nexus3
    
  2. 运行Nexus

    docker run -tid -p 8081:8081 --name nexus  docker.io/sonatype/nexus3
    

Tips:

  • -tid -p 8081:8081将容器的8081端口映射到了设备的8081端口,因为Nexus的默认端口是8081
  • --name nexus指定了容器的name

完成上述步骤后,Nexus服务应该已经正常启动,若容器的启动过程出现错误,可以使用 docker logs 容器ID 来打印错误日志。

此时可以访问 http://ip地址:8081/nexus 即可访问Nexus的后台管理界面,考虑到大部分服务器的Linux系统都没有安装桌面程序,所以可以考虑两种方式测试服务是否正常运行:

  • 在服务端,可以通过 curl 命令来看是否能正常返回Html内容 curl 127.0.0.1:8081/nexus/
  • 在客户端,直接从浏览器访问 ip地址:8081/nexus,即可进入Nexus的后台界面。此种方式也是部署完成后的日常维护方式,不需要再登入服务器,直接访问该后台即可管理Maven仓库

四、Nexus后台管理界面功能简介

以下以Nexus3.29.2-02版本为例

4.1 管理员账号登录

进入管理界面后右上角会有个 “Sign in” 按钮,管理员默认账号为 admin ,初始密码为随机生成的,记录在 /nexus-data/admin.password 文件中,需要从服务器端查看。

**注意:**老版本的Nexus默认密码为admin123,但在Nexus3.17版本后默认密码已经变更,需要通过上述方式获取

4.2 仓库类型

在“Browse”界面,一开始会看到已经默认生成了七个仓库,我们只关注其中的四个 “maven” 前缀的仓库,其余的类似:

仓库名类型
maven-centralproxy
maven-publicgroup
maven-releasehosted
maven-snapshotshosted

对于有开发经验的开发者来说应该比较好理解这几个仓库的用途:

  • maven-central 为中央仓库,它的类型为 “proxy” 也表示了这个仓库为Maven中央仓库的代理,当在其余三个maven仓库搜索不到时,就会从中央仓库缓存至我们的仓库中

  • maven-public 为Nexus特有的仓库类型,准确的来说它并不是一个仓库,它的类型为 “group” ,表示它是几个仓库的集合,默认包含了 “maven-central”、“maven-release” 和 “maven-snapshots” 这三个仓库,当然你也可以在设置界面再添加其它的仓库到此集合中。之所以Nexus要设计这种仓库类型是为了便于开发侧添加远程地址,不需要将各个仓库地址一一添加,只需要添加 group 类型的仓库地址即可。

  • maven-release 和 maven-snapshots 就是用来存放我们开发的库的,按照它们的名称不难推测出分别用于存放release版本和snapshot版本的库。但可以看到它们的类型都为 “hosted”,所以事实上它们的唯一区别只在于是否允许“重复发布”,可以在设置界面中查看到它们的 “Deployment policy” 的设置是不同的。release仓库不允许重复发布,而snashots仓库允许重复发布。

综上我们可以看到Nexus的仓库分为三种类型:

  • proxy:即代理其它远程的Maven仓库
  • group:几个Maven仓库的集合
  • hosted:用于存放我们上传的库的仓库

可以根据需要再创建相应类型的仓库。

4.3 上传release版本的库

Nexus的后台界面为我们提供了图形化上传库的方式,即 “Upload” 界面,只需要上传相应 jar 包并填写好 Group、Name、Versin等信息即可上传至hosted类型的仓库中

但Nexus的图形化上传不支持Snapshots版本,要想上传快照版库就需要通过构建工具来部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值