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

news2024/10/5 21:23:23

什么是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.coloradmin.cn/o/1314509.html

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

相关文章

uniGUI for Delphi UniSweetAlert控件详解

UniSweetAlert是UniGUI后期版本新增的一个界面友好的消息提示和输入控件&#xff0c;是ShowMessageN的升级版&#xff0c;UniSweetAlert增加了更多的可控制属性。 属性介绍 1、AlertType&#xff1a;提示类型&#xff0c;分为atError、atSuccess、atInfo、atQuestion、atWarni…

JavaSE语法之七:封装

文章目录 一、封装的概念二、访问限定符三、封装扩展之包1. 包的概念2. 导入包中的类3. 自定义包4. 常见的包 四、实现封装五、static成员1. 再谈学生类成员变量2. static修饰成员变量3. static修饰成员方法4. static成员变量初始化 六、代码块1. 代码块概念及其分类2. 普通代码…

【VMware安装及虚拟机配置】

1. 下载VMware 进入 VMware Workstation 17 Pro下载链接 下拉到如下位置&#xff0c;点击DOWNLOAD 2. 安装VMware 参考&#xff1a;虚拟机VMware下载与安装教程 本次安装是vmware 17&#xff0c;安装步骤差不多&#xff0c;只参考第二部分即可。 3. 激活VMware 密钥&…

version `GLIBC_2.29‘ not found 的原因和怎么解决问题

程序上经常有在这台Linux上编译&#xff0c;然后放到另一个Linux上运行的情况。 如果Linux版本差别不大或都是ubuntu或centos系列还好。 如果不是一个系列很容易出现GLIBC 找不到的情况。 尤其是ubuntu上编译&#xff0c;然后放到centos系列。因为centos为了追求所谓的稳定&…

计算机组成原理-选择语句和循环语句的汇编表示

文章目录 选择语句jmpjxx示例&#xff1a;选择语句的机器级表示扩展&#xff1a;cmp指令的底层原理 循环语句使用条件转移指令实现循环用loop指令实现循环 选择语句 不一定知道指令的位置&#xff0c;所以jmp直接跳转到指令的位置很难办 jmp 标号相当于位置&#xff0c;名字…

生产派工自动化:MES系统的关键作用

随着制造业的数字化转型和智能化发展&#xff0c;生产派工自动化成为了提高生产效率、降低成本&#xff0c;并实现优质产品生产的关键要素之一。制造执行系统&#xff08;MES&#xff09;在派工自动化中发挥着重要作用&#xff0c;通过实时数据采集和智能调度&#xff0c;优化生…

Ubuntu虚拟机怎么设置静态IP

1 首先先ifconfig看一下使用的是哪个网络接口&#xff1a; 2 编辑 sudo vi /etc/netplan/00-installer-config.yamlnetwork:ethernets:ens33: # 根据您的网络接口进行修改&#xff0c;有的是eth0&#xff0c;有的是ens33&#xff0c;具体看第一步显示的是哪个网络接口addres…

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透)

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF&#xff08;网络安全渗透&#xff09; 全国职业院校技能大赛高职组信息安全管理与评估 &#xff08;赛项&#xff09; 评分标准 第三阶段 夺旗挑战CTF&#xff08;网络安全渗透&#xff09; *竞赛项目赛题* 本文…

【算法与数据结构】53、LeetCode最大子数组和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;程序一共两个变量&#xff0c;一个result一个count。result用来记录最终的结果&#xff0c;count记录当…

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法 文章目录 针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法Abstractscreen和tmux介绍tmux常用命令以及快捷键Byobu简单操作步骤集锦参考文献 Abstract PyTorch多卡并行运行程序is one of the mos…

Leetcode sql50基础题最后的4题啦

算是结束了这个阶段了&#xff0c;之后的怎么学习mysql的方向还没确定&#xff0c;但是不能断掉&#xff0c;而且路是边走边想出来的。我无语了写完了我点进去看详情都不让&#xff0c;还得重新开启计划&#xff0c;那我之前的题解不都没有了&#xff01;&#xff01; 1.第二高…

Winform高效获取控件(Control)方法 + 源码分析

背景&#xff1a;风好大&#xff0c;睡觉有点怕&#xff0c;起床敲代码了 之前学的都是都是通过遍历控件&#xff08;Controls&#xff09;&#xff0c;判断控件名是否相等来获取Control 其实直接通过:Controls["控件名"]&#xff0c;就可以获得需要的控件 为什么呢…

【Java JVM】运行时数据区

JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的数据区域, 这些区域有着各自的用途。 根据《Java虚拟机规范》中规定, JVM 所管理的内存大致包括以下几个运行时数据区域, 如图所示: 这个运行时数据区被分为了 5 大块 方法区 (Method Area)堆 (Heap)虚拟机栈 (V…

npm ,yarn 更换使用国内镜像源,阿里源,清华大学源

在平时开发当中&#xff0c;我们经常会使用 Npm&#xff0c;yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的&#xff0c;如果没有梯子的话。会感觉特别特别慢&#xff0c;所以&#xff0c;使用国内的源是非常有必要的。 在这里插入图片描述 Nnpm&#xff0c; yarn …

我的NPI项目之Android 安全系列 -- 先认识一下ST33Jxxx

目前接触过的高通平台都没有集成单独的SE&#xff0c;安全运行环境都是高通自家的TEE&#xff0c;又言Trustzone。高通Keystore功能也是依赖TEE来实现的。那么&#xff0c;如果另外集成SE&#xff0c;那么高通的Keystore如何集成&#xff1f;TEE部分要如何配置&#xff1f; 最近…

软件设计规约和评审

软件设计规约 概要设计规约&#xff1a;这是面向软件开发者的文档&#xff0c;主要作为软件项目管理人员、系统分析人员与设计人员之间交流的媒介。它指明了软件的组织结构&#xff0c;主要内容包括&#xff1a; 系统环境&#xff1a;硬件、软件接口与人机界面&#xff1b;外部…

大模型下开源文档解析工具总结及技术思考

1 基于文档解析工具的方法 pdf解析工具 导图一览&#xff1a; PyPDF2提取txt&#xff1a; import PyPDF2 def extract_text_from_pdf(pdf_path):with open(pdf_path, rb) as file:pdf_reader PyPDF2.PdfFileReader(file)num_pages pdf_reader.numPagestext ""f…

WX小程序案例(一):弹幕列表

WXML内容 <!--pages/formCase/formCase.wxml--> <!-- <text>pages/formCase/formCase.wxml</text> --> <view class"bk bkimg"><!-- <image src"/static/imgs/ceeb653ely1g9na2k0k6ug206o06oaa8.gif" mode"scal…

【专题】树和二叉树的转换

目录 一、树转换成二叉树步骤一&#xff1a;加线——在兄弟之间加连线步骤二&#xff1a;抹线——除结点的左孩子外&#xff0c;去除其与其余孩子之间的关系步骤三&#xff1a;旋转——以树的根结点为轴心&#xff0c;将整树顺时针转45 二、二叉树转换成树步骤1&#xff1a;加线…

MQ入门—centos 7安装RabbitMQ 安装

三&#xff1a;RabbitMQ 安装 1.环境准备 Linux 的 CentOS 7.x 版本。Xftp 传输安装包到 Linux。Xshell 连接 Linux&#xff0c;进行解压安装。 RabbitMQ安装包 链接&#xff1a;https://pan.baidu.com/s/1ZYVI4YZlvMrj458jakla9A 提取码&#xff1a;dyto xshell安装包 链接&…