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

news2024/11/24 22:48:13

文章目录

  • 1.前言
  • 2.Maven的仓库
    • 2.1.仓库类型
  • 3.私服Nexus
    • 3.1.Nexus的安装与配置
      • 3.1.1.使用安装包安装
      • 3.1.2.使用Docker安装
    • 3.2.Nexus配置
      • 3.2.1.仓库配置
    • 在这里插入图片描述
  • 4.私服的使用
    • 4.1.修改Maven配置
    • 4.2.从私服中下载构件
    • 4.3.推送构件到私服
  • 5.小结

1.前言

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

(一)5分钟做完 Maven 的安装与配置
(二)使用 Maven 创建并运行项目、聊聊 POM 中的坐标与版本号的规则

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


2.Maven的仓库

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

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

2.1.仓库类型

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

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

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

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

3.私服Nexus

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

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

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

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


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

3.1.Nexus的安装与配置

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

  • 《官方Quick Start文档》
  • 《官方下载地址》

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

  • 《CSDN下载资源》
  • 《百度网盘下载》 提取码:f0t9

网盘中包含了 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库:
在这里插入图片描述

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

5.小结

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

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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超级困惑:单品牌好还是多品牌好?

超级困惑&#xff1a;单品牌好还是多品牌好&#xff1f; 相当于&#xff1a;买一套房好还是多套房好&#xff1f; 品牌是增加被消费者选择的优势 同一公司多品牌名之间&#xff0c;要区分明显 趣讲大白话&#xff1a;品牌要花大笔银子滴 【安志强趣讲信息科技87期】 **********…

?? JavaScript 双问号(空值合并运算符)

?? JavaScript 双问号&#xff08;空值合并运算符) 一、简述 在网上浏览 JavaScript 代码时或者学习其他代码时&#xff0c;可能会发现有的表达式用了两个问号&#xff08;??&#xff09;如下所示&#xff1a; let username; console.log(username ?? "Guest"…

kafka-console-ui v1.0.6发布

前言kafka-console-ui 是一款web版的kafka管理平台&#xff0c;从第一次发布到现在已经两年了&#xff0c;断断续续也更新了7个版本了&#xff08;v1.0.0~v1.0.6&#xff09;。一些常用的功能也陆续完善了不少&#xff0c;相对最新的kafka版本&#xff0c;某些功能上还是有所欠…

认识vue

认识vue.js框架 它是目前非常流行的一个框架。主要用于前端的MVVM的开发&#xff0c;也是前端的SPA开发框架&#xff0c;它是一个专 门用于服务前端的一个框架 能够实现SPA的框架目前有3个 1. vue.js 2. react.js 3. angular M:model V:view VM:viewmodel 网页代码相当于v…

你好 ETHDenver的2023年BUIDLathon已经准备就位开始建造

这是一站式 BUILDer 指南&#xff0c;可以帮助你做好迎接 Cartesi 在 ETHDenver 的挑战并且还可以使你充分的体验它你好&#xff0c;全球的以太坊社区。我们很高兴的将Cartesi 技术带到了丹佛市ETHDenver 2023的BUIDLathon中。如果你是一名喜欢测试新技术并且喜欢钻研创新的开发…

《Spring源码深度分析》第2章 容器的基本实现

目录标题前言一、容器的基本用法1、创建一个简单的Spring项目2、功能分析3、spring-beans模块1.核心类&#xff1a;DefaultListableBeanFactorya.容器加载相关类图b.XmlBeanFactory类2.核心类&#xff1a;XmlBeanDefinitionReader4、容器的基础 XmlBeanFactorya.配置文件封装b.…

1029 旧键盘 C++中find函数的使用

题目链接&#xff1a; 一、自己的想法&#xff1a;&#xff08;弱化版双指针&#xff09; 思路为用两个“指针”i, j分别指向原来字符串和实际输入字符串的第一个字符&#xff0c;然后判断i&#xff0c;j所指字符是否一致&#xff0c;若是则i, j同时&#xff0c;若否则将i所指…

浏览器多线程到事件循环机制

浏览器与js运行机制 进程与线程 进程 进程是CPU分配资源的最小单位&#xff0c;它是一个可以自己独立运行且拥有自己资源空间的任务程序&#xff1b;包括程序以及程序所使用的内存及系统资源 线程 线程是CPU调度的最小单位&#xff0c;它就是程序中的一个执行流&#xff1…

2023年三月份图形化二级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

基础数据结构--线段树(Python版本)

文章目录前言特点操作数据存储updateLazy下移查询实现前言 月末了&#xff0c;划个水&#xff0c;赶一下指标&#xff08;更新一些活跃值&#xff0c;狗头&#xff09; 本文主要是关于线段树的内容。这个线段树的话&#xff0c;主要是适合求解我们一个数组的一些区间的问题&am…

java中的类型转换

java的基本数据类型 1.数值型&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;long&#xff0c;float&#xff0c;double 2.字符型&#xff1a;char 3.布尔型&#xff1a;boolean 数据类型占据字节数byte1个字节short2个字节int4个字节long8个字节float4个字节…

开发一个问答式的node脚本

前言 我们公司一般有早上知识分享的规定&#xff0c;那天有个同事分享了如何通过Node脚本实现国际化替换 。 起因是这样的&#xff0c;有一个已经成熟的项目了&#xff0c;突然被要求实现中英文切换。前端中英文切换基本上就是通过 vue-i18n 来实现&#xff08;不熟悉的可以看…

安装配置DHCP

本次实验采用CentOS71.检查在安装DHCP之前先使用rpm命令查看系统中已有的DHCP软件包rpm -qa | grep dhcp由此可知&#xff0c;系统中尚未安装DHCP软件包2.安装我们可以使用yum命令为系统安装DHCP软件包yum -y install dhcp安装完成后再次检查可以看到DHCP软件包3.配置dhcp配置文…

20230225在WIN10下安装PR2023失败的解决

20230225在WIN10下安装PR2023失败的解决 2023/2/25 23:42 对于Adobe Premiere Pro 2023&#xff0c;就算你安装在早起的Windows 10上&#xff0c;也会安装失败的&#xff01; 对于WIN7&#xff0c;就不要再想安装PR2023了&#xff0c;根本不支持呀&#xff01; Adobe Installer…

php 基于ICMP协议实现一个ping命令

php 基于ICMP协议实现一个ping命令 网络协议是什么ICMP 协议什么是ICMP?ICMP 的主要功能ICMP 在 IPv4 和 IPv6 的封装Wireshark抓包ICMP 请求包分析PHP构建 ICMP 数据包php中的 pack & unpack 函数字节和字符packunpackICMP计算校验和步骤总结网络协议是什么 网络协议&…

_hand-1

实现防抖函数&#xff08;debounce&#xff09; 防抖函数原理&#xff1a;把触发非常频繁的事件合并成一次去执行 在指定时间内只执行一次回调函数&#xff0c;如果在指定的时间内又触发了该事件&#xff0c;则回调函数的执行时间会基于此刻重新开始计算 防抖动和节流本质是不一…

Socket通信详解

Socket通信详解 文章目录Socket通信详解Socket流程介绍函数介绍编程实例Socket流程介绍 socket通信类似于电话通信&#xff0c;其服务器基本流程就是 Created with Raphal 2.3.0安装电话socket()分配电话号码bind()连接电话线listen()拿起话筒accept()函数介绍 socket() 其中…

行测-判断推理-图形推理-样式规律-加减异同

图1图2图3选D图1图2都有的线&#xff0c;则消除图1图2只有一幅图里有的线&#xff0c;则保留选C第一列和第二列都有的线&#xff0c;则消除第一列和第二列只有一幅图里有的线&#xff0c;则保留选A第一列顺时针旋转90&#xff0c;再与第二列去同存异选D第一列和第二列去同存异&…

二叉树、队列、栈、广义表(二)数据结构与算法(十八)

数据结构与算法&#xff08;一&#xff09;-软件设计&#xff08;十七&#xff09;https://blog.csdn.net/ke1ying/article/details/129220378 线性表-队列与栈 队列&#xff1a;先进先出。 栈&#xff1a;先进后出。 循环队列&#xff1a;队投和队尾连接起来。 队空的条件&…

LeetCode 21.剑指 Offer II 078. 合并两个有序链表 | C语言版

LeetCode 21. 合并两个有序链表 | C语言版LeetCode 21. 合并两个有序链表题目描述解题思路思路一&#xff1a;使用栈代码实现运行结果参考文章&#xff1a;思路二&#xff1a;减少遍历节点数代码实现运行结果参考文章&#xff1a;[]()LeetCode 剑指 Offer II 078. 合并排序链表…