基于Nexus搭建Maven私服基础入门

什么是Nexus?它有什么优势?

要了解为什么需要nexus的存在,我们不妨从以下几个问题来简单了解一下:

为什么需要搭建私服?如果没有私服会出现什么问题?

对于企业开发而言,如果没有私服,我们所有的依赖都需要从 Maven 的中央仓库或者第三方的 Maven 仓库下载到本地。如果一个团队中的所有人都重复的从 Maven 仓库下载组件无疑加大了仓库的负载和带宽的消耗,而且如果企业的带宽资源紧张,引入依赖等待时长更是灾难的存在。

另外,很多情况下项目的开发都是在内网进行的,我们某些组件不可能发布到外网,所以我们可能需要一个自己的maven私服。

搭建私服有什么优势?

Maven 私服的概念就是在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库。当我们需要下载一些构件(artifact)时,如果本地仓库没有,则再去私服下载,私服没有再去中央仓库下载(例如阿里云仓库)并将其缓存下来,这样一来下一个用户可以直接在本地私服得到自己需要的资源,这就避免了没必要的带宽消耗。

在这里插入图片描述

小结一下,这种私服的依赖部署方式会有以下几个优点:

  1. 减少网络带宽流量。
  2. 加速 Maven 构建。
  3. 便于获取第三方隐私组件。
  4. 提高稳定性、增强控制。
  5. 降低中央仓库的负载。

什么是Nexus?

Nexus 是一个专门管理Maven、npm等仓库管理软件,它不仅可以实现快速搭建私服,还具备如下一些优点使其日趋成为最流行的 Maven 仓库管理器:

  1. 提供了强大的仓库管理功能,构件搜索功能。
  2. 它基于 REST,友好的 UI 是一个 ext.js 的 REST 客户端。
  3. 它对于资源的占用较少。
  4. 基于简单文件系统而非数据库。

基于Linux搭建nexus

准备nexus

了解nexus之后,我们不妨基于Linux服务器搭建一个属于自己的nexus私服。首先我们需要到nexus官网下载一下nexus的资源。下载地址为:https://help.sonatype.com/repomanager3/product-information/download

这里需要补充一下,笔者nexus用的不是最新版本,所以到老版本里面找到了nexus-3.28.0-01-unix.tar.gz这个资源,地址为:https://help.sonatype.com/repomanager3/product-information/download/download-archives—repository-manager-3

选择的版本如下图所示:

在这里插入图片描述

完成资源下载之后,我们不妨将其上传到服务器上。以笔者为例,将其上传到tmp目录,意味一次实验性的部署。

在这里插入图片描述

完成上传后,我们先将其解压。

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

然后进入nexus的bin目录。

cd nexus-3.28.0-01/bin/

运行如下命令,将nexus启动(笔者这里为了方便排查问题,先将nexus前台启动)

./nexus run

不久后控制台输出下面这段内容,就说明nexus启动成功了。我们不妨到浏览器访问这个页面。

在这里插入图片描述

启动nexus并测试可用性

nexus默认端口号为8081,所以我们到浏览器键入ip:8081即可进入登录页面,刚刚进入时需要初始化一下,这里我们稍等片刻。

在这里插入图片描述

完成初始化之后,我们点击sign in,准备进行登录。

在这里插入图片描述

初次进入时需要输入用户名和密码,用户名为admin,密码读者可以按照页面提示找到对应文件完成输入,如下图所示:

在这里插入图片描述

我们不妨使用cat命令查看一下,如下所示,得到一串字符串复制下来去登录。

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# cat /tmp/sonatype-work/nexus3/admin.password
6f1d326f-b030-4043-ab37-xxxxxxx

拿着上文复制的密码点击登录。

在这里插入图片描述

然后我们就进入了初始化页面,这里直接点击next。

在这里插入图片描述

然后页面会提示我们修改密码,这里我们按照提示输入两次点击下一步即可。

在这里插入图片描述

下一个设置页面,我们设置允许匿名访问。

在这里插入图片描述

自此完成所有的基本配置。

配置nexus

接下来就开始我们nexus的配置步骤了,如果我们希望私服缓存的依赖需要指定到一个位置,我们可以自己创建一个blob,这个其实非必须的,这个blob配置完成之后,我们就可以将后续仓库的blob指定到到这个blob中,笔者这里为了简单就没有配置,直接用default的。如下图所示,关于blob的具体配置,笔者会在后续系列教程中演示。

在这里插入图片描述

我们希望nexus的工作流程为,现在自己本地releases仓库里面找,如果没有则去snapshots仓库里面找,如果快照仓库没有就去阿里云那边找,如果阿里云有则直接将其缓存到blob中。

在这里插入图片描述

为了做到这一点,我们首先需要配置一个阿里云的仓库,首先点击创建仓库

在这里插入图片描述

选择maven-proxy,创建一个代理仓库,如果本地没有找到依赖资源则通过这个代理帮我们查找。

在这里插入图片描述

如下图,读者可以按照读者的解释将名称、版本策略,原创仓库地址等配置设置好。

在这里插入图片描述

完成后点击下方create即可。

在这里插入图片描述

完成了代理仓库的创建,我们希望自己平时自定义的jar上传时可以按需传到release和snapshot上,比如我现在写了个临时的snapshot组件给其他开发用,我希望自己能够上传到到snapshot的仓库中,这样分门别类的规范便于后续团队包的控制。

所以我们首先配置一个快照的仓库,在配置过程中,我们发现nexus提供了一个现成的仓库,我们不妨修改一下它的配置直接使用。如下图所示,找到maven-snapshots直接点击箭头进入修改界面。

在这里插入图片描述

我们点击进去可以看到它的策略就是我们需要的仅仅存放快照包,然后我们将layout policy改为permissive。

在这里插入图片描述

往下查找,将部署策略也改为允许重复部署,避免我们对于同一版本的组件无法再次上传到maven私服中。

在这里插入图片描述

完成后到下方点击save即可保存。

在这里插入图片描述

同理,maven-release一样的配置,这里就不多做赘述了。

在这里插入图片描述

自此我们完成了大半部分的工作,接下来我们就要实现我们的私服查找jar包策略了,即:

  1. 先看看release,没有看snapshots
  2. snapshots没有,到代理仓库中找。
  3. 代理仓库中有,直接缓存到blob中。

要做到这一点,我们还是需要创建一个仓库,将上述我们配置的仓库组合起来,对外暴露。

在这里插入图片描述

选择配置一个maven-group,将我们上文配置的仓库按照顺序组合起来。

在这里插入图片描述

设置好group名称之后,我们滑倒最下方设置依赖查找顺序,以笔者为例,可以看到策略就是我们上文所说的方式自顶向下配置,完成后点击save即可。

在这里插入图片描述

测试从nexus私服获取资源

自此我们完成的nexus的配置了,现在我们不妨就来试试看nexus私服配置是否生效,我们到自己本机上配置一下maven的setting.xml。

首先指定本地仓库地址为E:/repository,方便自己后续查看私服下载是否成功。

 <localRepository>E:/repository</localRepository>

然后我们需要配置maven私服的地址,所以我们到nexus的页面找到我们配置的group点击copy。

在这里插入图片描述

此时页面就会弹出这个地址的值,我们将其复制下来。

在这里插入图片描述

然后在镜像中配置这个私服地址,确保我们后续的依赖都是通过这个私服地址去下载,而该私服地址就是我们上文配置的组合地址,它会严格按照 release仓库->snapshots仓库->阿里云仓库顺序依次查找,配置如下所示:

 <mirrors><mirror>  <id>nexus</id>  <name>nexus repository</name>  <url>http://192.168.43.98:8081/repository/my-group/</url>  <mirrorOf>central</mirrorOf>  </mirror>   </mirrors>

补充说明,如果需要下载快照包的读者需要将mirror注释掉,改用下面这段配置,原因很简单,笔者在测试过程中发现maven默认不允许拉取快照包的,所以我们保留id和url的值,改用下面这段配置确保快照包可以正常拉取。

<profile><id>nexus</id><repositories><repository><id>nexus</id><url>http://192.168.43.98:8081/repository/my-group/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile></profiles><activeProfiles><activeProfile>nexus</activeProfile>
</activeProfiles>

用到私服时,我们需要其账户密码,所以在setting.xml上方我们需要配置一下和我们mirror的id一直的server标签,表明私服的账户和密码值。

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

这两个配置的关系如下所示,通过id来进行关联的。

在这里插入图片描述

然后我们创建一个spring boot项目,maven和setting.xml都设置为我们上文修改的maven。打开项目点击reimport。如下图所示,可以看到我们的maven就会到maven私服中下载资源。

在这里插入图片描述

完成后查看我们上文配置的仓库,可以发现jar包都从私服那边下载下来了。

在这里插入图片描述

回到nexus管理页面,我们也可以看到nexus把代理仓库的jar都缓存下来了。

在这里插入图片描述

还记得我们上文提到一个缓存jar包到blob中吗?这个blob默认名字为default,我们不妨到这个目录查看一下default有什么变化。

cd /tmp/sonatype-work/nexus3/blobs/default/

输入du查看大小,可以看到大小变为90M,由此可知阿里云这个代理仓库的依赖都被缓存下来了。

[root@localhost blobs]# du -sh *
90M     default

上传自定义组件

接下来我们再来测试一下组件的上传,对此我们首先编写一个maven项目。写下一个测试类。

在这里插入图片描述

然后我们在mave项目的pom文件中添加下面这段配置,意为:如果是releases版本则传到releases对应的url,如果是snapshots则传到snapshots的url。

<!--    如果是releases版本则传到releases对应的url,如果是snapshots则传到snapshots的url--><distributionManagement><repository><id>releases</id><name>Nexus Release Repository</name><url>http://192.168.43.98:8081/repository/maven-releases/</url></repository><snapshotRepository><id>snapshots</id><name>Nexus Snapshot Repository</name><url>http://192.168.43.98:8081/repository/maven-snapshots/</url></snapshotRepository></distributionManagement>

为了确保源码可以被下载,我们还需添加下面这段配置

<build><plugins><!--   要将源码放上去,需要加入此配置    --><plugin><artifactId>maven-source-plugin</artifactId><version>2.1</version><configuration><attach>true</attach></configuration><executions><execution><phase>compile</phase><goals><goal>jar</goal></goals></execution></executions></plugin></plugins></build>

最后指定我们的maven项目版本为1.0,这意味着这个项目是发布版本,所以它会传到release仓库中。

 <groupId>org.example</groupId><artifactId>test-nexus</artifactId><version>1.0</version>

总结一下每个配置的位置如下图所示,读者可以自行核对一下。

在这里插入图片描述

注意,我们上文指定了两个新的url,其id对应的账户密码我们也得补充的maven的setting.xml中,内容如下所示:

 <server><id>releases</id><username>admin</username><password>123456</password></server><server><id>snapshots</id><username>admin</username><password>123456</password></server><server><id>nexus</id><username>admin</username><password>Z120194199</password></server></servers>

截图如下:

在这里插入图片描述

完成后,我们点击clean,再点击deploy。

在这里插入图片描述

如果deploy输出下面这段结果就说明部署成功了。

在这里插入图片描述

我们不妨到nexus上找到点击browse选择发布仓库。

在这里插入图片描述

可以看到我们的jar包传上来了。

在这里插入图片描述

同样的我们到maven一栏中通过精确搜索的方式也能找到这个jar包。快照版的jar发布方式也是一样的,这里就不多做介绍了。

在这里插入图片描述

下载自定义组件

为了测试jar包是否可用,我们不妨创建一个新的maven项目试着将其引入看看。这里我们不妨介绍一下如何通过nexus获取自定义组件的坐标,首先点击箭头。

在这里插入图片描述

然后点击jar包

在这里插入图片描述

选择usage,即可看到maven坐标,我们将其复制下来。

在这里插入图片描述

然后到新项目中引入,如下图所示

在这里插入图片描述

然后等待该项目将从私服中不断下载依赖。

在这里插入图片描述

随着时间的推移,我们可以看到该我们自己的组件也下载成功了。

在这里插入图片描述

在项目中也能正常使用这个类。

在这里插入图片描述

步入源码,点击下载也能正常下载。

在这里插入图片描述

可以看到源码正常下载了。

在这里插入图片描述

自此我们nexus私服的简单入门就完成了。

一些常见的操作

删除jar包

有时候我们很多没必要的jar包上传多了会占用没必要的内存,我们希望将其从nexus中删除。我们可以选择browser,然后选择发布仓库。

在这里插入图片描述

找到要删除的jar包点击删除,随后页面就会提示该删除在后台进行。

在这里插入图片描述

随后我们就可以看到这个仓库对应的依赖空了。

在这里插入图片描述

我们回到本地,将对应快照包删除,尝试从私服拉取看看能不能拉取到,可以看出私服删除后,本地就拉取不到这个jar包了。

在这里插入图片描述

上传jar包

我们不妨接着上一个操作演示一下jar包的上传,点击upload选择mave-release

在这里插入图片描述

点击该选项,查找本地jar包

在这里插入图片描述

然后手动输入坐标,点击上传

在这里插入图片描述

回到broswer,可以看到这个jar包我们上传上来了。

在这里插入图片描述

再一次拉取,同步成功,由此nexus基本入门完成。

在这里插入图片描述

参考文献

Nexus搭建Maven私服并使用私服

Linux安装nexus3 (带Linux压缩包)

linux配置部署nexus

手动上传SNAPSHOT文件到Maven私服Nexus的方法

解决maven私服nexus无法下载snapshot版本包

Maven不能下载SNAPSHOT包但是能下载RELEASE包的解决办法

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十九)Stable Diffusion使用教程:ai室内设计案例

今天我们聊聊如何通过SD进行室内设计装修。 方式一:controlnet的seg模型 基础起手式: 选择常用算法,抽卡: 抽到喜欢的图片之后,拖到controlnet里: 选择seg的ade20k预处理器,点击爆炸按钮,得到seg语义分割图,下载下来: 根据语义分割表里的颜色值,到PS里进行修改: 语…

SoloLinker第一次使用记录,解决新手拿到板子的无所适从

本文目录 一、简介二、进群获取资料2.1 需要下载资料2.2 SDK 包解压 三、SDK 编译3.1 依赖安装3.2 编译配置3.3 启动编译3.4 编译后的固件目录 四、固件烧录4.1 RV1106 驱动安装4.2 打开烧录工具4.3 进入boot 模式&#xff08;烧录模式&#xff09;4.4 烧录启动固件4.5 烧录升级…

大型网站架构演进过程

架构演进 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户&#xff0c;问题就会变得很棘手。大型网站架构主要就是解决这类问题。 架构选型是根据当前业务需要来的&…

RRC下的NAS层

无线资源控制&#xff08;Radio Resource Control&#xff0c;RRC&#xff09;&#xff0c;又称为无线资源管理&#xff08;RRM&#xff09;或者无线资源分配&#xff08;RRA&#xff09;&#xff0c;是指通过一定的策略和手段进行无线资源管理、控制和调度&#xff0c;在满足服…

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询&#xff1a; where字句的子查询&#xff1a; 通常用in关键字&#xff1a; 举个例子&#xff1a; in关键字&#xff1a; not in 关键字&#xff1a; in 也可以用于枚举集合&#xff1a; where中可以用子查询来作为集合来筛选元祖。 some&#xff0c;all的运算符号…

Spring cloud - 断路器 Resilience4J

其实文章的标题应该叫 Resilience4J&#xff0c;而不是Spring Cloud Resilience4J&#xff0c;不过由于正在对Spring cloud的一系列组件进行学习&#xff0c;为了统一&#xff0c;就这样吧。 概念区分 首先区分几个概念 Spring cloud 断路器&#xff1a;Spring Cloud的官网对…

elementui + vue2实现表格行的上下移动

场景&#xff1a; 如上&#xff0c;要实现表格行的上下移动 实现&#xff1a; <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…

Flutter在Visual Studio Code上首次创建运行应用

一、创建Flutter应用 1、前提条件 安装Visual Studio Code并配置好运行环境 2、开始创建Flutter应用 1)、打开Visual Studio Code 2)、打开 View > Command Palette。 3)、在搜索框中输入“flutter”&#xff0c;弹出内容如下图所示&#xff0c;选择“ Flutter: New Pr…

12345、ABCDE项目符号列表文字视频怎么制作?重点内容介绍PR标题模板项目工程文件

Premiere模板&#xff0c;包含10个要点标题12345、ABCDE项目符号列表文字模板PR项目工程文件。可以根据自己的需要定制颜色。在视频的开头、中间和结尾使用。包括视频教程。 适用软件&#xff1a;Premiere Pro 2019 | 分辨率&#xff1a;19201080 (HD) | 文件大小&#xff1a;9…

Visual Studio 2022封装C代码为x64和x86平台动态库

1.引言 本文介绍如何使用Visual Studio 2022将C语言函数封装成x64和x86平台上使用的动态链接库(dll文件)并生成对应的静态链接库(lib文件)&#xff0c;以及如何在C程序中调用生成的dll。 程序下载&#xff1a; 2.示例C语言程序 假设需要开发一个动态链接库&#xff0c;实现复…

CleanMyMac X2024(Mac优化清理工具)v4.14.5中文版

CleanMyMac X是一款颇受欢迎的专业清理软件&#xff0c;拥有十多项强大的功能&#xff0c;可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等&#xff0c;并且这款清理软件操作简易&#xff0c;非常好上手&#xff0c;特别适用于那些刚入手苹…

提升英语学习效率,尽在Eudic欧路词典 for Mac

Eudic欧路词典 for Mac是一款专为英语学习者打造的强大工具。无论您是初学者还是高级学习者&#xff0c;这款词典都能满足您的需求。 首先&#xff0c;Eudic欧路词典 for Mac具备丰富的词库&#xff0c;涵盖了各个领域的单词和释义。您可以轻松查询并学习单词的意思、用法和例…

数据泄露警报:不同行业危机解析与迅软DSE的拯救之道

在如今全球信息数字化不断加速的时代里&#xff0c;数据资料的价值更为突出&#xff0c;根据IBM数据显示&#xff0c;数据泄露的平均成本接近440万美元。一旦泄露可能意味着丢失信息、声誉受损&#xff0c;并可能导致延误和生产力损失。那么不同行业一旦发生了数据泄露将会面临…

大 O 表示法在机器学习中的重要性

一、介绍 在不断发展的机器学习领域&#xff0c;算法的效率至关重要。大 O 表示法成为这方面的一个关键工具&#xff0c;它提供了一种描述算法性能或复杂性的语言&#xff0c;特别是在时间和空间方面。本文探讨了 Big O 表示法在机器学习中的重要性&#xff0c;阐明了它在算法选…

狗dog目标检测数据集VOC+YOLO格式1W+张

狗&#xff0c;是食肉目犬科 [11]犬属 [13]哺乳动物 [12]&#xff0c;别称犬&#xff0c;与马、牛、羊、猪、鸡并称“六畜” [13]。狗的体型大小、毛色因品种不同而不同&#xff0c;体格匀称&#xff1b;鼻吻部较长&#xff1b;眼呈卵圆形&#xff1b;两耳或竖或垂&#xff1b;…

一文搞懂OSI参考模型与TCP/IP

OSI参考模型与TCP/IP 1. OSI参考模型1.1 概念1.2 数据传输过程 2. TCP/IP2.1 概念2.2 数据传输过程 3. 对应关系4. 例子4.1 发送数据包4.2 传输数据包4.3 接收数据包 1. OSI参考模型 1.1 概念 OSI模型&#xff08;Open System Interconnection Reference Model&#xff09;&a…

复制粘贴——QT实现原理

复制粘贴——QT实现原理 QT 剪贴板相关类 QClipboard 对外通用的剪贴板类&#xff0c;一般通过QGuiApplication::clipboard() 来获取对应的剪贴板实例。 // qtbase/src/gui/kernel/qclipboard.h class Q_GUI_EXPORT QClipboard : public QObject {Q_OBJECT private:explici…

安装鸿蒙开发者工具DevEco Studio

1.进入官网下载工具 https://developer.harmonyos.com/cn/develop/deveco-studio/ 选择您电脑对应的系统下载即可 2.安装 很简单直接点击“next”,此处不做赘述 3.配置环境 安装完成后&#xff0c;打开DevEco Studio 会提示配置环境。安装node.js和ohpm 如果不小心关了&a…

【第1期】SpringSecurity基于角色和权限的细粒度接口权限控制

SpringSecurity 细粒度权限控制 一、Role 和 Authority的区别 角色用来表示某一类权限的集合&#xff0c;权限粒度更小&#xff0c;方便细粒度控制 二、创建用户、角色、权限相关表&#xff1a; CREATE TABLE common_user (id bigint(20) NOT NULL COMMENT 主键id,login_na…

Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…