添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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版本,要想上传快照版库就需要通过构建工具来部署。

    Nexus搭建远程Maven仓库一、简介想必对于使用 JVM 平台语言的开发者而言已经对Maven很熟悉了,Maven是当下最流行的 JVM平台语言的构建工具之一。Maven除了是一款优秀的构建工具之外,得益于良好的社区,Maven仓库中也维护着大量优质的开源库,其它的一些构建工具比如AndroidStudio默认使用的Gradle也使用了Maven的仓库。Maven仓库分为三种类型:本地仓库(local):存放在本地设备上,可以理解为本地缓存。中央仓库(central):由Maven社区
    maven远程仓库(私服)搭建 文章目录maven远程仓库(私服)搭建安装私服:解决出错:查看配置文件:仓库类型 :nexus 仓库默认在sonatype-work 目录中:将本地代码上传私服:验证:私服里面已经上传成功:从私服上下载代码:验证:此时你会发现项目已经可以运行了 安装私服: 安装链接:https://pan.baidu.com/s/1TjCluRWYyAN1S0Btv4ET0A 提取...
    nexus搭建好了之后,在浏览器输入:http://192.168.204.142:8081/nexus/#view-repositories 登录后并能管理自己的仓库呢。 主界面如下: 仓库介绍: 一般用到的仓库种类是hosted、proxy、Hosted: hosted:宿主仓库,用来发布一些第三方不允许的组件,比如oracle驱动、比如商业软件jar包。 一个是让maven从IDEA中独立出来,便于和其他IDE结合在其他IDE中开发 二就是便于学习maven(如何配置镜像源、如何建立本地仓库) 三是因为自带的maven能够配置的东西非常少。 借鉴1:maven安装和配置阿里云镜像(各种详细配置) - Yan_Yang - 博客园 借鉴2:【狂神说Java】JavaWeb入门到实战_哔哩哔哩_bilibili
    测试环境:物理机:ubuntu 16.04 虚拟机:centos 7.2内容比较简单,学习一下Maven部署项目的过程。1.服务器安装配置jdk和tomcatscp apache-tomcat-8.5.15.tar.gz [email protected]:/opt/ scp jdk-8u131-linux-x64.rpm [email protected]:/opt/ ssh 192.
    前因后果:由于国外的maven中心仓库访问总是会出问题,于是这两天就自己整了个 Nexus3 的本地私服,如果需要可以看我上一篇文章,路标:https://blog.csdn.net/xiaodouyaer624/article/details/103613666 。现在呢,我又想把这个本地私服映射出去,我要跑到哪都能访问,这样,我就能一个仓库全世界都能用了。怎么实现呢?请看官跟着我走~