【Maven】(三)Maven仓库概念及私服安装与使用 附:Nexus安装包下载地址

1.前言

本系列文章记录了 Maven 从0开始到实战的过程,Maven 系列历史文章清单:

(一)5分钟做完 Maven 的安装与配置
(二)使用 Maven 创建并运行项目、聊聊 POM 中的坐标与版本号的规则
(三)Maven仓库概念及私服安装与使用 附:Nexus安装包下载地址
(四)图解Maven3依赖的功能特性:依赖范围、依赖传递、依赖冲突
(五)Maven模块的继承与聚合 多模块项目组织构建
(六)详细聊聊 Maven 的生命周期、阶段(phase)、插件目标(goal)

其实在前面两篇文章中我们提到过了Maven仓库,包括 本地仓库的配置、镜像配置、依赖引入等,本篇主要是系统的讲述一下 Maven 仓库的概念与使用,以及如何通过 Nexus 安装私服。


2.Maven的仓库

在Maven出现之前,我们在一个项目中要使用的三方的 jar 包,需要到各类官网中下载下来,并放到项目的/lib目录下,如果有多个项目都要使用到同一个jar包的话,就需要每个项目都复制一份,这种方式就造成了大量的重复。

而有了 Maven 的仓库之后,仓库给各种构件提供一个存储的位置,我们知道,通过 Maven 建立的坐标体系 groupIdartifactIdversion 可以确定保存在唯一一个构件,我们只需要在仓库中保存一份jar包,通过在pom.xml引入对应的坐标,就可以在项目中使用啦。

2.1.仓库类型

Maven 的仓库只有两种类型:本地仓库远程仓库,也就是字面的含义,一个在本地硬盘中,一个在网络中。

对于 远程仓库 来说,有几种特殊的子类型,最特殊的就是 Maven 的 中央仓库,这个是 Maven 提供的官方仓库,我们可以在里面找到市面上的几乎任何一个开源构件。除了中央仓库之前,还有其他的公共仓库,例如:JBoss的仓库,阿里云、腾讯云的镜像仓库等。

另外一种就是我们接下来要讲到的私服了,私服是假设在局域网中的仓库服务,也可以看作是对公用远程仓库的代理。

他们的关系图下图所示:
在这里插入图片描述

2.2.仓库搜索服务

我们在开发中,想要使用到某个构件的时候,就需要去搜索这个构件对应的坐标,除了在官网、GitHub等网站搜索以外,我们还可以直接使用仓库搜索服务来搜索构件。

搜索构件的网站还是挺多的,我一般使用的是 《mvnrepository》,打开之后直接在搜索栏输入你想要找的构件的groupIdartifactId,例如:想找到Spring的相关Jar包,就可以输入org.springframework
在这里插入图片描述

3.私服Nexus

私服就像是本地仓库与中央仓库的中间层,本地的开发电脑在引入某个依赖的时候,可以先从私服查找,如果私服没有找到再去公用仓库下载,同时,也允许我们将开发好的某些构件上传到私服中,供其他的开发者下载使用。

这么做带来一定的好处,例如:

  • 节省带宽,增加构件的下载速度,同时也增加了仓库的稳定性。
    在同一个局域网中,只要有一个开发者引入了某个构件,触发了私服从公用仓库中下载构件后,私服就会将这构件缓存到私服所在的服务器中。此时,再有其他的开发者要使用这个构件,就能够直接从局域网下载了,局域网相对于公网,更快更稳定。
  • 可以上传公共仓库中没有的构件,与同一局域网中的其他开发者共享。

私服的网络交互关系如下图所示:
在这里插入图片描述


既然私服这么好,我们就要把私服安装好,使用起来。业界使用最多的私服是Nexus,下面我们就来看一下如何对Nexus进行安装和配置。

3.1.Nexus的安装与配置

先贴两个官方的文档,能够访问的同学可以直接访问:

国内可能很难访问到官网,访问不到的同学也没关系,可以从以下位置下载安装包:

网盘中包含了 windows、Unix、Mac 三种不同操作系统的安装包,可以按需下载,不同系统的安装方式都是大同小异的,本篇主要介绍的是通过 CentOS7 来进行安装。

如果不想手动下载安装包,可以考虑直接看下面的 使用Docker安装Nexus


注:Nexus是一个Java服务,所以在安装之前,我们需要先配置好Java环境,Nexus3需要配置JDK8,如果已经有了Java环境,可以直接开始下面的安装步骤。

3.1.1.使用安装包安装

安装方法非常简单,先进入CentOS服务器,在/usr中创建安装目录nexus,将tar包拷贝到这个位置解压:

tar -zxvf nexus-3.47.1-01-unix.tar.gz

解压完成之后,会生成两个文件夹,分别是:nexus-3.47.1-01sonatype-work,进入./nexus-3.47.1-01/bin,现在就可以直接启动Nexus了

# 后台启动
./nexus start
# 停止服务
./nexus stop
# 重启服务
./nexus restart
# 查看运行状态
./nexus status

启动好后,可以通过浏览器访问,我这里的服务器内网ip是192.168.200.101,通过 http://192.168.200.101:8081 访问,此时就安装成功了:
在这里插入图片描述

3.1.2.使用Docker安装

对使用Docker不感兴趣的同学可以跳过本节,直接看到下面的Nexus配置

如果你不会使用Docker,又对Docker感兴趣的话,可以尝试花个10多分钟,看看我之前的两篇文章:《Docker基本概念与安装使用》 《Docker镜像仓库》


首先要去Docker镜像仓库中找到Nexus的镜像:
在这里插入图片描述

在当前页往下翻,可以看到很多运行的指令,这里我们需要考虑的是私服中jar包的持久化问题,因为后续开发的过程中会不断的往私服发布jar包,我们需要将Docker容器中的数据目录挂在到宿主机中,以免数据丢失。

为了到达这个要求,我们需要执行如下的指令:

docker volume create --name nexus-data
# 将容器的8081端口映射到宿主机的8082端口
docker run -dp 8082:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3

同样的ip,使用 8082 也访问成功了
在这里插入图片描述

3.2.Nexus配置

首先需要使用管理员账号登录,管理员密码在sonatype-work/nexus3文件夹里面,在里面可以找到一个admin.password的文件,打开它会得到一串uuid,这就是密码:

9d86042e-21ce-4098-9f76-4d64e27d5554

如果是docker的话,需要使用以下指令进入到容器中,然后在同样的位置找到密码。:

docker exec -it nexus bash

获取到密码之后,回到网页上,点击右上角的 sign in ,使用 admin 登录,接下来会进入一个引导流程,会做下面两个配置:

  • 修改密码:这里直接改成admin123
  • 配置是否允许匿名登录:即后面使用Maven连接私服的时候是否需要使用密码

安全的配置一般都是不允许使用匿名登录的,这里我们选择Disable anonymous access


3.2.1.仓库配置

登录成功之后,我们需要在私服中配置国内的公用仓库作为私服下载构件的下载源,在这之前,我们先看一下默认的仓库配置。打开Server administration and configuration进行配置,也就是标题栏上面那个齿轮,然后打开Repositores
在这里插入图片描述在这里插入图片描述
打开之后可以看到一些默认的仓库,我们需要注意红框中的那4个:


Type:

  • proxy:代理仓库,用来代理中央仓库或其他的远程公用仓库。
  • hosted:用来保存我们在局域网中发布的构件,也就是私有仓库。
  • group:仓库分组,里面可以配置多个仓库,并指定仓库访问的优先级。

Name:

  • maven-snapshots:用于存放里程碑版本为SNAPSHOT的构件。
  • maven-release:存放非SNAPSHOT的构件。
  • maven-central:代理Maven中央仓库,这里会缓存从中央仓库下载的构件。
  • maven-public:是仓库的分组,这个仓库中配置了上面三个仓库的访问顺序。

在这里插入图片描述


现在,我们需要新建一个仓库代理阿里云公用仓库https://maven.aliyun.com/repository/central,并将其放到 snapshotsmaven-central 之间。回到仓库列表页面,点击左上角的Create repository,然后选择`maven2(proxy)
在这里插入图片描述在这里插入图片描述

然后打开maven_public,将ali_repo配置上去:
在这里插入图片描述


如果是正式环境使用的话,还需要对新建角色role,并针对每一个开发者都创建一个用户user,这里只做演示,就不配置用户了,直接使用admin。

4.私服的使用

4.1.修改Maven配置

先修改setting.xml的两个配置,让Maven可以连接上私服:

首先是远程仓库认证,上面我们选择了Disable anonymous access,如果是允许匿名访问的话,这里就可以不用配置。

<servers>
    <server>
        <id>nexus</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

然后是镜像配置,这里的url配置成上面所说的maven-public地址:

<mirrors>
    <mirror> 
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <url>http://192.168.200.101:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

注意:两个配置中的id需要保持一致

4.2.从私服中下载构件

我尝试引入一个spring-core的jar包(一定本地仓库中没有的,不然不会触发从私服中拉取),去查看私服中是否进行了下载:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.20</version>
    </dependency>
</dependencies>

在这里插入图片描述

上图可以看到,私服的仓库路径中已经有了spring-core包,验证成功。

4.3.推送构件到私服

接下来试试如何推送自定义构件到私服中,在之前的两篇文章中我们已经介绍了如何通过package插件将项目打成一个可执行的包,但如果想要把这个包发布到仓库中的话,需要使用以下的两个指令。

# 发布到本地仓库
mvn clean install
# 发布到远程仓库
mvn clean deploy
# 如果需要忽略test 
mvn clean deploy -Dmaven.test.skip=true
<groupId>com.ls.mavendemo</groupId>
<artifactId>hello-world-2</artifactId>
<version>1.0-SNAPSHOT</version>

通过 deploy 指令将当前的项目打包并上传到私服中,然后就报了个错:

Deployment failed: repository element was not specified in the POM inside distributionManage
ment element or in -DaltDeploymentRepository=id::layout::url parameter

这是因为我们还没有在POM中配置将构件推送到哪个仓库中,在pom.xml中加入以下配置,需要注意idsetting.xml中的server相同,以及url中的仓库地址是不是snapshots

<distributionManagement>
    <repository>
        <id>nexus</id>
        <url>http://192.168.200.101:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus</id>
        <url>http://192.168.200.101:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

再次运行deploy之后,提示上传成功,查看一下私服的仓库:
在这里插入图片描述


如果是上传正式版本,我们可以修改verison,如下:

<groupId>com.ls.mavendemo</groupId>
<artifactId>hello-world-2</artifactId>
<version>1.0.0</version>

再次deploy之后,直接查看maven-public库:
在这里插入图片描述

发现两个版本的构件都有了,后续其他的项目协作开发者就可以直接引入使用了。

4.4.打包源码

在开发协作中,有时候还需要将源码发布到私服中以便其他开发者下载,源码中包含了注释和接口说明,更有利于协作,例如:api包、封装的工具包、基础架构包等。

但是Maven的默认生命周期中没有加入打包源码的插件,所以需要我们自行引入,在plugins标签中加入插件:

<plugin>
    <!--源码插件引入-->
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.0.1</version>
    <!--执行计划-->
    <executions>
        <execution>
            <!--在生命周期的哪个阶段执行-->
            <phase>verify</phase>
            <goals>
                <goal>jar-no-fork</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Maven的生命周期和插件会在后面的文章中详细的讲述,这里只放一个使用方法。重新打包完成之后,查看Maven仓库会发现里面多了一个xxx-sources.jar的源码包:

在这里插入图片描述

5.小结

本篇主要讲述了仓库的类型与使用,并讲解了如何安装和配置Nexus私服,以后可以直接在公司里面部署使用了。

使用的时候需要注意的是,本地的Maven配置文件setting.xml以及pom.xml中,涉及到仓库认证的部分,需要保证servermirror, repository ,snapshotRepository中的id标签的值保持一致。

下一篇将会继续讲解Maven中依赖的相关内容,包括:依赖传递、依赖冲突、依赖调解、依赖的归类、排除依赖等内容。


希望本文对你有所帮助,如果觉得有帮助的话,可以帮忙点点赞哦!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥之以墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值