仓库分类
根据位置 | 仓库细分 | 解释 |
本地仓库 | 本地仓库 | 在每个开发者本地的一个仓库,在setting.xml文件中配置的路径。第一次运行maven的时候,会在本地创建一个仓库,并且直接把远程的jar包下载到本地。下次配置的时候,如果本地存在jar包,就直接从本地获取。 |
远程仓库 | 中央仓库 | maven工程中,只有本地仓库和远程仓库之说。一个普通只能有一个本地仓库,但是可以配置多个远程仓库。 |
私服 | 私服是特殊的一种远程仓库,为了节省时间和带宽。在局域网内假设的一个私有的仓库服务器,用来代理所有外部的远程仓库。内部的项目或者jar包,还能部署到私服上供其他的项目下载。 也可以降低中央仓库的负荷。 | |
其它公共库 | 除了中央库和私服,还有很多其他的远程仓库,常见的有java.net.maven 库 和 JBoss Maven 库等。 |
私服介绍
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:
- mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性,id是唯一标识一个mirror就不多说了,name貌似没多大用,相当于描述,url是官方的库地址,mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。
- 镜像库并不是一个分库的概念,就是说当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载。但事实却不是这样,当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询。
- maven的mirror是镜像,而不是“分库”,只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份和容灾。
mirror也不是按settings.xml中写的那样的顺序来查询的。所谓的第一个并不一定是最上面的那个。当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。