Maven私服Nexus安装部署

仓库分类

根据位置 仓库细分 解释
本地仓库 本地仓库 在每个开发者本地的一个仓库,在setting.xml文件中配置的路径。第一次运行maven的时候,会在本地创建一个仓库,并且直接把远程的jar包下载到本地。下次配置的时候,如果本地存在jar包,就直接从本地获取。
远程仓库 中央仓库 maven工程中,只有本地仓库和远程仓库之说。一个普通只能有一个本地仓库,但是可以配置多个远程仓库。
私服 私服是特殊的一种远程仓库,为了节省时间和带宽。在局域网内假设的一个私有的仓库服务器,用来代理所有外部的远程仓库。内部的项目或者jar包,还能部署到私服上供其他的项目下载。 也可以降低中央仓库的负荷。
其它公共库    除了中央库和私服,还有很多其他的远程仓库,常见的有java.net.maven 库 和 JBoss Maven 库等。

私服介绍

      私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库将构件下载到私服,再提供给本地仓库下载。远程仓库例如maven中央仓库、JBoss仓库、Java.net仓库等我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus。
                    

 Nexus介绍

       Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,Nexus支持WebDAV与LDAP安全身份认证。Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。

       为什么要构建Nexus私服?如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。

总之,在本地构建nexus私服的好处有:

1)加速构建;

2)节省带宽;

3)节省中央maven仓库的带宽;

4)稳定(应付一旦中央服务器出问题的情况);

5)控制和审计;

6)能够部署第三方构件;

7)可以建立本地内部仓库;

8)可以建立公共仓库

安装Nexus 

Nexus 需要 jdk环境,在安装前需要确认你的 centos 机器上已经安装好了 jdk  

      新建目录,下载安装包,Nexus分为专业收费的Nexus Pro与免费的Nexus OSS两个版本。Nexus 提供两种安装包,一种是包含 Jetty 容器的 bundle 包,另一种是不包含容器的 war 包。

1)war包安装方式

下载地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01.war

直接将war包放在tomcat的根目录下,启动tomcat就可以用了

2)源码安装方式(内置Jetty)

下载地址:https://www.sonatype.com/download-oss-sonatype      

创建指定目录 上传jar包

jar下载地址:https://download.csdn.net/download/neusoft2016/23527958

cd /usr/local
mkdir nexus
cd nexus
rz
# 选择上传后,解压
tar -zxvf nexus-2.14.4-03-bundle.tar.gz
cd nexus-2.14.4-03/
# 获取路径用于配置环境变量
pwd

 #配置环境变量

vim /etc/profile

把 nuxus 环境添加到 profile 尾部,环境代码如下:

export RUN_AS_USER=root
export MAVEN_HOME=/usr/local/nexus/nexus-2.14.4-03
export PATH=$PATH:$MAVEN_HOME/bin

然后,保存退出。重新加载配置文件,让配置生效。

//重新加载profile文件,让配置生效
source /etc/profile

进入 nexus 根目录下的 bin 目录,启动 nexus 服务。

cd /usr/local/nexus/nexus-2.14.4-03/bin

进入bin目录下,运行./nexus start,启动服务

//启动
nexus start
//停止
nexus stop
//重启
nexus restart
//查看状态
nexus status

访问地址

# 3.x
http://localhost:8081
#2.x
http://localhost:8081/nexus/
用户名密码为,admin和admin123
# 防火墙问题
systemctl start firewalld.service #停止firewall
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看防火墙状态

8081为默认的端口号,要修改端口号可进入/usr/local/nexus/nexus-2.14.4-03/conf打开nexus.properties文件,修改application-port属性值就可以了。

nexus仓库对比

仓库类型 解释 详细说明
proxy(代理类型) 代表代理远程的仓库,最典型的就是Maven官方中央仓库、JBoss仓库等等 用来代理远程公共仓库,Maven 中央仓库、JBoss 远程仓库,当PC访问中央库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。这样的优势只要其中一个人从中央库下来了,以后大家都是从Nexus私服上进行下来,私服一般部署在内网,这样大大节约的宽带。
hosted(宿主类型) 内部项目的发布仓库(内部开发人员,发布上去存放的仓库) Hosted是宿主机的意思,就是怎么把第三方的Jar放到私服上。
Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 正式版本,即稳定包所在场所
Snapshot:  快照版本,即不稳定的频繁发布场所,常用于团队成员快速联调
Mixed:混合的
group(仓库组类型) 又叫组仓库,用于方便开发人员自己设定的仓库

用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组

virtual(虚拟类型) 虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用) 兼容Maven1 版本的jar或者插件 一般不用 版本太老了

Public Repositories下的仓库

   1)3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
   2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
   3)Central: 用来代理maven中央仓库中发布版本构件的仓库
   4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
   5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
   6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
   7)Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本
所以自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下载包会更快。

如果私服服务器也无法访问互联网,需要我们手动上传项目需要所有jar 到私服指定位置

nexus2可以通过直接把本地文件目录直接放到服务器相应目录解决

/usr/local/nexus/sonatype-work/nexus/storage/central

默认没修改的情况下在安装目录的根下

nexus3 参考网址:http://www.gjxblog.com/2021/01/04/1229/

https://www.cnblogs.com/fanjingfeng/p/14411817.html

不同 Nexus2 Nexus3
访问路径 默认是/nexus 默认是/
优势分析 内部机器都上不了网,我需要把我本地的机器jar包导入到nexus中具有优势 Nexus3的功能非常强大,可以做很多组件的容器,包括yum,docker等
存储差异 Nexus2里面的组件是存储在storage文件夹下,而且是原格式存储 3时代,存储在了blobs文件夹下,根据名字就可以知道了:存储模式已经是blob格式;文件将会被进行序列化处理
运行差异 2时代是需要安装windows服务的,需要管理员权限 在3时代,实现了绿色安装,是的,只需要执行exe即可。

Maven与Nexus OSS的配合使用

修改maven对应的settings.xml

# servers 内增加我们的私库用户
<server>                                                                       
  <id>snapshots</id>                                                                 
  <username>admin</username>                                                   
  <password>admin123</password>                                                
</server> 

# mirrors增加私库
<mirror>                                                                    
  <id>nexus</id>                                                            
  <name>Local nexus repo</name>                                             
  <url>http://nexus.aeonluck.me/nexus/content/groups/public/</url>          
  <mirrorOf>*</mirrorOf>                                                    
</mirror>

特别要注意的是:

一定要配置为 <mirrorOf>*</mirrorOf>,即让所有的仓库都先经过私库,这样可以将远程下载的包缓存到本地

关于Maven的mirror:

  1. mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性,id是唯一标识一个mirror就不多说了,name貌似没多大用,相当于描述,url是官方的库地址,mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。
  2. 镜像库并不是一个分库的概念,就是说当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载。但事实却不是这样,当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询。
  3. maven的mirror是镜像,而不是“分库”,只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份容灾。

mirror也不是按settings.xml中写的那样的顺序来查询的。所谓的第一个并不一定是最上面的那个。当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。

阿里云免费私有 maven 仓库【云效私有仓库】

地址: https://repomanage.rdc.aliyun.com/my/repo

猜你喜欢

转载自blog.csdn.net/neusoft2016/article/details/120410029