Maven私服Nexus的搭建

为什么要搭建私服

当我们在 pom.xml 文件种依赖了某个包后,如果在没有做特殊配置(也就是使用 maven 的默认配置)的情况下,Maven 会首先到本地仓库 或 Github 去搜索,如果本地仓库没有此依赖包,会到中央仓库去找,默认的中央仓库的地址:中央仓库服务器在国外,可想而知,速度是没办法保证的。有时候网速不好,有可能一晚上才能下载完,你说气不气。

当然国内也又相应的仓库,比如阿里的阿里云等,速度还是很不错的。

但是一般来讲,公司甚至团队内部都会搭建 Maven 私服,一来稳定性可以得到保证,再者,比如内部的一些基础包或者项目的通过工具包之类的,也可以放到上面去,从而提高项目开发的灵活度。如果没有私服,你就需要安装到本地仓库中,一旦发生了修改,本地还需重新安装,那多麻烦,所以私服是很重要的。

私服存在的合理性

Maven中的依赖是从服务器仓库中下载的,Maven的仓库只有两大类:

1.本地仓库
2.远程仓库,其中在远程仓库中又分为 3 种:中央仓库、私服、其它公共库

Maven 用户直接连接远程仓库下载依赖的做法并不是Maven 建议使用的(尤其对一个开发团队来说),Maven 的最佳实践就是使用 Maven 私服来构建真个团队的项目部署和管理

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构建的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。

构建 Maven 私服使用 Nexus,Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用 Nexus 你可以只在一个地方就能够完全控制访问和部署在你所维护仓库种的每个Artifact。

构建Nexus私服

说完了私服的好处,你是不是已经等不及开始构建你的 maven 私服了,那么我们一起构建我们的私服。首先进入Nexus的网站 链接,找到你所需要的包,这里就只简单说一下 Linux 下的安装的方式,如果是其它版本,可自行去官网查找。

这里我们使用的是 nexus-2.12.0-01-bundle.tar.gz

tar -zxvf nexus-2.12.0-01-bundle.tar.gz -C /usr/local/nexus

-C 代表 change 目录的意思,可以指定解压的目录的(注意,Linux命令是严格 区分大小写 的),本例中解压的 /usr/local/nexus 下。
在这里插入图片描述
解压完成之后,/usr/local/nexus/ 目录下会多出两个目录,nexus-2.12.0-01,sonatype-work

在这里插入图片描述
如此你就成功啦,现在需要进入 nexus-2.12.0-01 的根目录 bin 中开启 nexus 服务

在这里插入图片描述
此时出现啦一个警告,出现 NOT RECOMMENDED TO RUN AS ROOT

翻译如下:
不推荐去运行 nexus 当你是以 root 身份的时候

接着后面提示解决方案 If you insist running as root,then set theenvironment variable RUN-AS-UER=root before running this scripts

翻译如下:
如果您坚持以root身份运行,那么在运行这个脚本之前设置环境变量RUN-AS-UER=root

解决方案

1.进入 bin 目录下的 nexus 文件中(:set nu 显示行号),修改 23 行内容,RUN_AS_USER=root,注意把前面的 # 去掉,# 代表注释

在这里插入图片描述
保存以后,再次启动 ./nexus start 成功

在这里插入图片描述
2.关闭防火墙

systemctl stop firewalld

3.浏览器中输入 http:// 192.168.247.244:8081/nexus (每个人的 ip 不同,写自己的ip,端口号默认 8081)
在这里插入图片描述
初识 Nexus

通过上面的学习,我们已经学会搭建 Nexus 私服,现在继续说一下 nexus 的一些内容。

简介

  • nexus是一个强大的maven仓库管理器,它极大的简化了本地内部仓库的维护和外部仓库的访问
  • nexus是一套开箱即用的系统不需要数据库,它使用文件系统加Lucene来组织数据
  • nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过IDEA和Eclipse集成使用
  • nexus支持webDAV与LDAP安全身份认证
  • nexus提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,占用较少的内存,基于简单文件系统而非数据库

优点总结

  • 节省外网带宽
  • 加速Maven构建
  • 部署第三方构件
  • 提高稳定性,增强控制
  • 降低中央仓库的负荷
  • 控制和审计
  • 建立本地内部公用仓库

下面附一张私服仓库的工作流程帮助大家了解
在这里插入图片描述

接着,回归正题,我们可以通过右上角 Login In 登录,这里所有人默认的账号是:admin,密码是 admin123。管理员登录后,可以在设置页面管理角色、用户等其它一些列的操作。例如创建一个角色,给角色设置某一个仓库的管理权限,然后向这个角色中添加人员。具体操作不做过多介绍,一看就明白。

管理员还可以管理仓库,如添加 aliyun 等,不过一般来说,默认的的几个仓库就可以了。默认仓库如果下:

在这里插入图片描述

在 Nexus 中仓库被分为了 4 种类型

  • hosted:本地仓库,服务于局域网,通常我们会 maven:deploy 自己的构建到这一类型的仓库中。
    这里顺遍提一下 Maven项目中 package、deploy 和 install 的区别
    package:命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行的 jar/war 包部署到本地 maven仓库和 maven私服仓库。
    install: 命令完成了项目编译、单元测试、打包功能,同时把打好的可执行的 jar/war 包部署到本地 maven仓库,但没有部署到 maven私服仓库
    deploy: 命令完成了项目编译、单元测试、打包功能,同时把打好的可执行的 jar/war 包部署到本地 maven仓库和 maven私服仓库

  • proxy:代理仓库,它们被用来代理远程的公共仓库,如 maven 中央仓库。

  • group:仓库组,用来合并多个 hosted/proxy 仓库。

  • virtual:maven1的,基本上被淘汰,无需过多了解。

仓库还有一个属性为Policy(策略)表示该仓库为发布(Release)版本仓库还是快照(Snapshot)版本仓库。最后两列的值为仓库的状态和路径。

下面来说一下各个仓库(Repository)的区别

  • Central:这里存放我们自己项目中发布的构建, 通常是Release版本的,。
  • Releases:比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库。
  • Snapshots:这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本。
  • 3rd party::Release版本,顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库嘛,没错, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rdparty仓库。
  • Apache Snapshots:这是一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构件。
  • Public Repositories:该仓库组将上述所有策略为Release的仓库 聚合 并通过一致的地址提供服务。

目前为止,我们已经简单的了解啦一下 Nexus ,如果有兴趣的朋友可以去详细理解一下,这里就不做过多介绍,喜欢此文章的希望点赞支持!!!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值