使用Nexus在Ubuntu环境下搭建Maven私服

2023-12-13 05:53:55

前言

最近公司上新项目,需要通过Nexus来搭建一套内部使用的Maven仓库,以前都是习惯直接从阿里云镜像仓库上直接拉取对应的jar包,这次也要自己体验一下,搭建一个属于自己的Maven仓库

一、什么是Maven私服

Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库,比如常见的阿里云镜像仓库)。

这里要注意,并不是说Maven私服只能架设在局域网,像我前公司,就是把Maven私服部署到公网上的,当然架设在局域网标识着只能在公司内部使用,保密级别更高

在这里插入图片描述
私服搭建后,如果局域网内的用户想要下载某个包或者构件时,会按照如下的顺序进行请求和下载。

  • 1.请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步
  • 2.请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3 步
  • 3.请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。

另外需要注意,如果公司的私服是搭建在局域网内的,那就无需远程仓库,可以直接把相应的构件上传至私有仓库,直接供Maven用户使用。这个就是现在公司的模式。

二、Maven私服的作用

Maven 私服作用如下:

  • 节省外网带宽:大量对于外部远程仓库的重复请求,会消耗很大量的带宽,利用 Maven私服代理外部仓库后,能够消除对外部仓库的大量重复请求,降低外网带宽压力。
  • 下载速度更快:Maven 私服位于局域网内,从私服下载构建更快更稳定。
    便于部署第三方构件:有些构件是无法从任何一个远程仓库中获得的(例如,某公司或组织内部的私有构件、Oracle 的 JDBC 驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部 Maven 项目使用。
  • 提高项目的稳定性,增强对项目的控制:如果不建立私服,那么 Maven 项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven 也能够正常运行。
  • 此外,一些私服软件(如 Nexus)还提供了很多额外控制功能,例如,权限管理、RELEASE/SNAPSHOT 版本控制等,可以对仓库进行一些更加高级的控制。
  • 降低中央仓库得负荷压力:由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。

三、Nexus的下载

目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,一般情况下,软件在有了3.x版本后,一定不会再更新维护2.x的版本了,而Nexus对于这两个版本是并行的关系。也就是2.x在更新迭代,3.x也在更新迭代,两个大的版本互不影响!两个版本连ui界面都不一样,但是其功能是一样的。

3.x的界面如下:
在这里插入图片描述
下载地址:
Nexus3.x官网

windows 3.54.1版本:
windos下载
提取码:79pa

Unix 3.54.1版本:unix或者linux下载
提取码:tymn

mac 3.51.0版本:
mac下载
提取码:c302

这里感谢 怪咖@ 的下载地址
因为公司是linux系统,这边我就下载的Unix这个版本的。

2.x的界面如下
在这里插入图片描述
下载地址
Nexus2.x官网下载

注意OSS版本是免费的,剩下都是收费的

在这里插入图片描述

那我这边公司是3.X的Unix版本,那我这里也是用这个版本使用

四、Nexus在Ubuntu的安装

4.1 安装xftp

首先把安装包上传到虚拟机Ubuntu系统中,我想通过软件Xftp去发送,结果就是连不上Ubuntu,给我折腾了半天
在这里插入图片描述
结果发现,Ubuntu没有安装xftp

vsftpd --version

在这里插入图片描述
按照提示输入命令

sudo apt-get install vsftpd

输入完之后,发现已经开始下载了
在这里插入图片描述

4.2 安装ssh

还要安装ssh-server
先检测是否有ssh

ps -e|grep ssh

这里说明没有安装过ssh
在这里插入图片描述
没安装就输入以下指令

sudo apt-get install openssh-server

在这里插入图片描述
接着执行如下命令启动ssh

/etc/init.d/ssh start

启动后需要输入密码验证
在这里插入图片描述
认证完如下:
在这里插入图片描述
之后就可以传送文件了,我将安装包放在了/home/hsp/data 目录下
在这里插入图片描述

4.3 安装JDK 8

sudo mkdir /usr/lib/jvm
sudo tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm

在这里插入图片描述
修改环境变量

sudo vim ~/.bashrc

文件末尾追加如下内容

#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_261  ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH  

如下:
在这里插入图片描述
使环境变量生效

 source ~/.bashrc

设置默认jdk

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_261/bin/java 300  
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_261/bin/javac 300  
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_261/bin/jar 300   
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_261/bin/javah 300   
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_261/bin/javap 300 

在这里插入图片描述
执行

sudo update-alternatives --config java

在这里插入图片描述

测试是否安装成功

java -version

在这里插入图片描述

4.4 安装Nexus安装包

操作如下指令

tar -zxvf nexus-3.54.1-01-unix.tar.gz -C /home/hsp/data/Nexus/

在这里插入图片描述
进入解压目录后,会看到两个文件夹
在这里插入图片描述

名称作用
nexus-3.54.1-01Neuxs运行所需要的文件,运行脚本,依赖jar包等
sonatype-work该目录包含Nexus生成的配置文件、日志文件、仓库文件等

更改环境变量,指向解压后的nexus-3.54.1-01
编辑环境变量

vim /etc/profile

在最后一行添加如下内容

export NEXUS_HOME=/home/hsp/data/Nexus/nexus-3.54.1-01
export PATH=$NEXUS_HOME/bin;

在这里插入图片描述
保存并关闭编辑窗口
执行如下语句使配置文件生效

source /etc/profile

在这里插入图片描述
进入路径/home/hsp/data/Nexus/nexus-3.54.1-01/bin执行

./nexus start

在这里插入图片描述
这里看到Starting nexus之后,说明启动成功了
访问地址

ip:8081

在这里插入图片描述
有些 Nexus 的版本中,是有默认配置的账号(admin)、密码(admin123)的,如果登录失败的话,可以在 提示目录下 的 admin.password 文件中查看初始化密码
在这里插入图片描述
我这边就去对应文件下找到密码即可
在这里插入图片描述
通过

cat admin.password

输入完初始密码后,就提示你需要更改了
在这里插入图片描述

在这里插入图片描述

五、配置Nexus

5.1Nexus端口号配置

在解压的文件夹nexus-3.54.1-01的etc文件夹中有个配置文件nexus-default.properties
在这里插入图片描述
可以在这边修改端口号
在这里插入图片描述

六、Nexus简介

6.1 Nexus简介以及特点

Nexus 的全称是 Nexus Repository Manager(Nexus 仓库管理器),是 Sonatype 公司的一个产品。Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。

Nexus 开源版具有以下优点:

占用内存小(28 M 左右)
具有基于 ExtJs 得操作界面,用户体验较好
使用基于 Restlet 的完全 REST API
支持代理仓库、宿主仓库和仓库组
基于文件系统,不需要依赖数据库
支持仓库管理
支持构件搜索
支持在界面上上传构件

6.3Nexus仓库属性和分类

初始的欢迎页面如下
在这里插入图片描述
点击上面的齿轮之后界面如下
在这里插入图片描述
仓库如下:
在这里插入图片描述

  • Type:仓库的类型,这里一共有三种

    • proxy:用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库。

    • hosted:又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。 hosted 宿主仓库又分为:releases 和shapshots,分别表示依赖的版本的发行版、快照版。快照版依赖不能上传到发行版仓库,反之亦然。nexus做了限制。

    • group:仓库组,用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。

  • Format:仓库的格式有两种maven2、nuget。我们是搞java的,所以新建仓库一般都是选择的maven2格式。

  • Status:仓库的状态,只有在线状态才能被访问。

  • URL:仓库的路径。

为了更加直观的理解仓库组、代理仓库和宿主仓库的概念,我们通过下图展示它们的用途和区别。
在这里插入图片描述
Maven 可以直接从宿主仓库中下载构件。
Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。

我们使用nexus私服,配置文件中配置的也就是仓库组地址。因为仓库组可以把代理仓库、宿主仓库聚合,这样就完美实现:从私服下载依赖,私服仓库找不到还能去代理仓库那找。找到了之后缓存到私服这样下次就能从私服直接获取了。

6.4 Nexus仓库配置以及创建仓库

刚安装好的nexus一共给我们创建了7个仓库(不同的nexus版本可能有一点差距),我们只需要关注Format为maven2的仓库即可,也就是一共有4个:
在这里插入图片描述

  • maven-central:该仓库用来代理 Maven 中央仓库,其策略为 Release,只会下载和缓存中央仓库中的发布版本的构件。
  • maven-releases:策略为 Release 的宿主仓库,用来部署公司或组织内部的发布版本构件。
  • maven-snapshots:策略为 Snapshot 的宿主仓库,用来部署公司或组织内部的快照版本构件。
  • maven-public:仓库组,默认聚合了以上三个仓库。
    下面进行一个一个讲解:

(1).maven-central

在这里插入图片描述
我们也可以再新建一个代理仓库,然后代理到阿里云镜像地址。通过阿里云镜像下载依赖要比maven中央仓库快的多。
点选Create Repositories
在这里插入图片描述

起一个名字,然后地址配置阿里云镜像的地址
https://maven.aliyun.com/repository/public
其它配置默认即可
在这里插入图片描述

(2).maven-public

maven-public仓库组就是将这几个仓库汇集到一块,然后项目使用nexus,不需要配置其他仓库的地址,只需要配置仓库组的地址即可。
现在的优先级就是去阿里云镜像仓库拉取,接着再去maven中央仓库拉取。
在这里插入图片描述

(3).maven-releases

release仓库需要把这块改一下,设置为Allow redeploy代表允许我们对仓库中的依赖维护升级新版本,如果设置为disable redeploy意味着我们无法将升级版本上传上来。

在这里插入图片描述

6.5 Nexus配置用户角色

nexus预定了两个用户

  • admin:最高权限
    浏览仓库
    搜索仓库
    上传构建
    新建修改仓库

  • anonymous:没有默认密码,不可以登录管理平台,拥有的权限有如下:
    浏览仓库
    搜索仓库

在低的版本当中可能会有一个deployment角色,不知道为什么新的版本当中这个角色给取消了。

在这里插入图片描述
一般我们不建议maven当中直接去配置admin账户,因为admin账户有新增和删除仓库的权限,我们可以选择新增一个账户,只给这个账号赋予上传依赖和下载依赖的权限即可,由于nexus是用户角色制,所以新增账户前,首先我们需要新建一个角色。然后让角色只具备上传依赖和下载依赖的权限。然后再给用户赋予该角色权限。

(1).新增权限

选择Role菜单栏,点击Create Role
在这里插入图片描述
选择Nexus Role即可
在这里插入图片描述

Role ID和Role Name自定义即可。
在这里插入图片描述
Privileges这一栏需要添加权限,一共15个需要添加到右边
清单如下:

nx-apikey-all
nx-repository-view-*-*-*
nx-repository-view-*-*-browse
nx-repository-view-*-*-read
nx-repository-view-maven2-*-*
nx-repository-view-maven2-*-browse
nx-repository-view-maven2-maven-public-browse
nx-repository-view-maven2-maven-public-read
nx-repository-view-maven2-maven-releases-*
nx-repository-view-maven2-maven-releases-browse
nx-repository-view-maven2-maven-releases-read
nx-repository-view-maven2-maven-snapshots-*
nx-repository-view-maven2-maven-snapshots-add
nx-repository-view-maven2-maven-snapshots-browse
nx-repository-view-maven2-maven-snapshots-read

在这里插入图片描述
Contained要添加上nx-anonymous
在这里插入图片描述
别忘了右下角保存!

(2).新增角色并赋予权限

新增用户,并指定该角色
在这里插入图片描述
选择刚才创建的权限
在这里插入图片描述
这时候可以使用新账号登录测试一下,登录后会发现他没有设置的权限,这就是我们要的效果!
在这里插入图片描述

6.6 Maven SNAPSHOT快照

接下来我们可能会频繁接触SNAPSHOT版本,在这里我们先熟悉一下这个版本号。

在我们是实际开发的项目当中很少会定义beat 、alpha 这些里程碑版本,因为这些一般都是开源框架才会定义的,他代表了一个特殊的寓意,例如beat就是测试版本,而我们经常在开发中会定义SNAPSHOT版本。SNAPSHOT不同于里程碑版本,里程碑版本他也就是一个普通的版本名称,说白了只是用这些英文来代表这个版本的含义,而SNAPSHOT对于私服来说是有特殊功能的。

Maven下载官网版本号
在这里插入图片描述
使用场景: 大型的应用软件通常由多个功能模块组成,这些模块有时候分别于不同的团队负责开发。假设有两个团队,他们分别负责项目中的 member-service(会员服务) 和 user-service(用户服务) 两个模块,且 member-service 需要依赖 user-service 项目。

基于以上假设,若 user-service 团队正在进行快节奏的 bug 修复及功能增强,会在短时间内高频率地更新代码以及发布版本。就会出现以下情况:

  • user-service 团队每次发布新版本更新代码时,都应该通知member-service团队。
  • member-service 团队则需要定期更新其 pom.xml 以获得最新的版本。

这样,势必会影响开发效率,甚至会影响项目的验收及投产。要解决这个问题,其实很简单,那就是使用 SNAPSHOT(快照)版本。

版本介绍: SNAPSHOT(快照)是一种特殊的版本,它表示当前开发进度的副本。与常规版本不同,快照版本的构件在发布时,Maven 会自动为它打上一个时间戳,有了这个时间戳后,当依赖该构件的项目进行构建时,Maven 就能从仓库中找到最新的 SNAPSHOT 版本文件

默认情况下对于快照本本的构件,Maven 会每天从仓库中获取一次更新,用户也可以在任何 Maven 命令中使用 -U 参数强制 Maven 检查更新。命令如下:mvn clean package -U

6.7 SNAPSHOT 版本 VS RELEASE 版本

Maven 仓库分为两种,Snapshot 快照仓库和 Release 发行仓库。Snapshot 快照仓库用于保存开发过程中的不稳定 SNAPSHOT 版本,Release 发行仓库则用来保存稳定的 RELEASE 版本。Maven 会根据模块的版本号(pom.xml 文件中的 version 元素)中是否带有 -SNAPSHOT 来判断是 SNAPSHOT 版本还是正式 RELEASE 版本。带有 -SNAPSHOT 是SNAPSHOT(快照)版本,不带 -SNAPSHOT 的就是正式 RELEASE(发布)版本。

区别SNAPSHOT版本RELEASE版本
定义版本号中带有 -SNAPSHOT版本号中不带有 -SNAPSHOT
发布仓库Snapshot 快照仓库Release 发行仓库
是否从远程仓库自动获取更新在不更改版本号的前提下,直接编译打包时Maven 会自动从远程仓库上下载最新的快照版本在不更改版本号的前提下,直接编译打包时,如果本地仓库已经存在该版本的模块,则 Maven 不会主动去远程仓库下载。
稳定性快照版本往往对应了大量带有时间戳的构件,具有不稳定性。发布版本只对应了唯一的构件,具有稳定性
使用场景快照版本只应该在组织内部的项目中依赖使用Maven 项目使用的组织外的依赖项都应该时发布版本的,不应该使用任何的快照版本依赖,否则会造成潜在的风险
发布前是否需要修改当项目经过完善的测试后,需要上线时,应该将项目从快照版本更改为发布版本不需要修改

6.8 项目中配置Nexus上传依赖

首先找到本地maven的setting.xml(在maven安装目录的conf目录下),打开后找到servers标签。加入以下内容
在这里插入图片描述

<servers>
    <!-- 这是配置访问私有仓库的用户名密码 -->
    <server>
      <!-- id标签可以随便填,只需要在servers中唯一即可,后面很多地方会使用该id -->
      <id>self-maven</id>
      <username>nexus</username>
      <password>deplyment123</password>
    </server>
</servers>   

在这里插入图片描述
maven配置好了,接下来去maven项目中设置:
在你想上传的模块的pom文件中,写入:

<distributionManagement>
      <repository>
          <!--注意这个id一定要填写我们maven的setting.xml当中配置的id-->
          <id>self-maven</id>
          <url>http://ip:port/repository/maven-releases/</url>
      </repository>
      <snapshotRepository>
          <!--注意这个id一定要填写我们maven的setting.xml当中配置的id-->
          <id>self-maven</id>
          <url>http://ip:port/repository/maven-snapshots/</url>
      </snapshotRepository>
</distributionManagement>
  • distributionManagement:负责将指定的构件部署到 Nexus 指定的仓库中。
  • repository:代表上传release版本存储的仓库地址
  • snapshotRepository:代表上传snapshot版本存储的仓库地址
  • 标签中的 id,就是上面我们配置的server id,maven会通过这个id去server中拿用户名密码去访问私服仓库。
  • 标签中的url,就是对应仓库的地址:仓库的url复制即可,注意对应仓库,弄反了是传不上去的

在这里插入图片描述

会根据该模块的版本进行自动选择,如果你的版本号带有SNAPSHOT如:0.0.1-SNAPSHOT< /version>,那么会上传到SNAPSHOT仓库,release也是这个道理,如果版本号不存在这两个单词,如1.0.0,那么会选择release仓库上传。

(1)接下来我们进行测试,首先第一步准备一个不是web工程的项目,如下:
可以看到项目中涉及到了SNAPSHOT
在这里插入图片描述
(2)然后进行以下步骤:
在这里插入图片描述
当然也可以直接运行maven命令:mvn clean deploy -DskipTests

(3)deploy执行完不报错的话就上传成功了。
在这里插入图片描述
(4)由于我的项目设置的是1.0-SNAPSHOT,也就是SNAPSHOT版本,所以他会自动上传到maven-snapshots仓库当中,如下:
在这里插入图片描述

6.9 项目当中配置Nexus下载依赖

配置本地maven。还是打开setting.xml,然后添加如下配置:
在这里插入图片描述
配置如下:

<profiles>
	<profile>
        <id>nexus</id>
        <!--声明一个或多个远程仓库  -->
		<repositories>
			<!-- 声明一个 Nexus 私服上的仓库  -->
			<repository>
				<!--仓库id,这个id就是上面配置的账号密码id  -->
				<id>self-maven</id>
				<!-- 仓库的名称 -->
				<name>nexus</name>
				<!--仓库的地址  -->
				<url>http://localhost:8081/repository/maven-public/</url>
				<!-- 是否开启该仓库的 release 版本下载支持 -->
				<releases>
					<enabled>true</enabled>
				</releases>
				<!-- 是否开启该仓库的 snapshot 版本下载支持 -->
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
		</repositories>
		<!-- 声明一个或多个远程插件仓库 -->
		<pluginRepositories>
			<!--声明一个 Nexus 私服上的插件仓库  -->
			<pluginRepository>
				<!--插件仓库 id -->
				<id>self-maven</id>
				<!--插件仓库 名称 -->
				<name>nexus</name>
				<!-- 配置的插件仓库的地址 -->
				<url>http://localhost:8081/repository/maven-public/</url>
				<!-- 是否开启该插件仓库的 release 版本下载支持 -->
				<releases>
					<enabled>true</enabled>
				</releases>
				<!-- 是否开启该插件仓库的 snapshot 版本下载支持 -->
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</pluginRepository>
		</pluginRepositories>
          <properties>
              <maven.compiler.source>1.8</maven.compiler.source>
              <maven.compiler.target>1.8</maven.compiler.target>
              <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
          </properties>
	<!-- 默认该profile生效 -->
          <activation>
              <activeByDefault>true</activeByDefault>
          </activation>
      </profile>
</profiles>       

以上配置中使用了一个 id 为 nexus 的 profile,这个 profile 中包含了与仓库相关的配置,同时配置中activeByDefault为true。当本机有 Maven 项目构建时,profile 中的仓库配置就会应用到项目中。配置当中的url就配置我们的仓库组地址即可:
在这里插入图片描述
(1)接下来进行测试下载依赖,首先让一个web工程引用该项目坐标
在这里插入图片描述
(2)紧接着我们需要找到本地maven仓库当中的包给删除掉
在这里插入图片描述

根据坐标就可以在本地仓库找到进行删除,删除前要保证引用该依赖的工程不是启动状态,不然删除不了

(3)再次测试web工程看看能否获取到依赖,需要刷新该工程,让他再次去获取依赖。

在这里插入图片描述

(4)刷新过后查看仓库已经存在了该依赖jar,我们并没有手动去install该项目,那也就意味着他是通过私服进行下载的。
在这里插入图片描述
5)假如缺少依赖,除了上面通过idea当中的刷新,也可以选择执行命令来下载依赖,mvn clean install的时候也会自动下载仓库当中缺少的依赖,通过下载依赖的信息我们可以知道他从哪个仓库进行下载依赖的:

在这里插入图片描述

Nexus 私服通常会与镜像(mirror)结合使用,使 Nexus 成为所有远程仓库的私服,这样不仅可以从 Nexus 中获取所有所需构件,还能将配置集中到 Nexus 私服中,简化 Maven 本身的配置。

我们可以创建一个匹配任何仓库的镜像,镜像的地址为 Nexus 中仓库的地址,这样 Maven 对于任何构件的下载请求都会被拦截跳转到 Nexus 私服中,在maven的setting.xml当中配置,其具体配置如下。

这个配置,在公司的话,可以直接更改,把maven-public的地址直接copy下来

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

在公司的话这么配置即可,这里我就不改了,还是写阿里云的镜像
在这里插入图片描述
之前阿里的镜像可以注释了,添加的镜像标签解释:

id:之前server的id,访问仓库组也要拿用户名密码
mirrorOf:*代表所有的依赖都从私服找
url:就是仓库组的,还是去仓库组右边copy即可
这样的话项目就完全依赖于nexus仓库了,假如一旦nexus挂了,整个项目都没办法下载包了,这时候可以将镜像替换为阿里云,这样一来除了公司内部包无法下载,最起码中央仓库的包还是可以下载的。

<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	 </mirror>

6.10测试SNAPSHOT版本

我们基于上面提到的introduce工程和demo工程再顺便测一下SNAPSHOT版本。一般SNAPSHOT版本是为了解决多个人同时开发所产生的问题,而我没有多台电脑,所以模拟起来也比较费劲。

(1)我们需要手动保留一份仓库当中修改前的代码。
给它名字上加了一个2
在这里插入图片描述
(2)修改一下mybatisplus_02_dql工程,然后将该工程重新deploy到仓库。
在这里插入图片描述
在这里插入图片描述

(3)删除本地仓库的mybatisplus_02_dql工程,将刚刚备份的mybatisplus_02_dql2改为mybatisplus_02_dql。

在这里插入图片描述
(4)看看新建的工程通过mvn clean install -DskipTests -U(-U是强制更新)是否会更新,注意一定要执行上面的指令才行
在这里插入图片描述
(5)成功更新了
在这里插入图片描述

6.11 Nexus构件搜索

默认可以根据group和name模糊搜索,还可以条件筛选查找
在这里插入图片描述

6.12手动上传构件

有些 Jar 文件(如 Oracle 的 JDBC 驱动)由于许可证等原因,无法存放在公开仓库中。此外,还有一些小型的开源项目,它们没有将自己的构件分发到公共仓库中,也没有维护自己的仓库,因此这些构件是无法从公共仓库中获得的。若 Maven 项目中需要这类构件,我们就需要将构件下载到本地,然后手动上传到 Nexus 私服。

(1)准备一个项目,版本号不要是SNAPSHOT版本的
(2)mvn clean install,进行打包
(3)在 Nexus 界面的upoad上传,默认是只允许上传releases仓库。

在这里插入图片描述
生成的就是一个带有该项目坐标的pom。
在这里插入图片描述
我这里导入一个lombok
在这里插入图片描述

如果该jar包还有其他依赖,那么需要手动上传pom.xml文件,就不能点击上面的generate生成了,通过点击add another asset 增加,操作如下
在这里插入图片描述
在这里插入图片描述
手动上传jar需要注意:

首先,打包要打成不可执行jar包;
其次,jar如果有其他依赖,一定要单独上传pom.xml文件,否则关联依赖无法拉取
在这里插入图片描述

6.13 关于nexus代理仓库状态

在这里插入图片描述

  • online-remote available:表示该被代理仓库可用
  • online-ready to connect:并不是代理仓库用不了。而是你根本还没有一个依赖去访问这个被代理仓库,nexus也不知道这个被代理仓库能不能用,所以它只能展示为待连接状态。
    新建的代理仓库都是 online-ready to connect状态。

代理仓库还有一个如下配置:
在这里插入图片描述

  • Blocked:假如选中相当于禁用该代理仓库。
  • Auto blocking:该配置:表示代理仓库会根据每次请求被代理仓库的响应来决定是否暂停请求这个被代理仓库,请求无响应就会block。

6.14 项目加载依赖的优先级

项目加载依赖项时的处理优先级:

优先级说明
第一优先级项目POM.XML文件中 < repository > 节点指定的仓库
第二优先级IDE中配置的Settings.xml中指定的仓库
第三优先级Maven默认的Settings.xml中指定的仓库

鸣谢(出处)

文中部分图片和资源转载自
怪 咖@
原文链接
Maven私服仓库配置-Nexus详解

文章来源:https://blog.csdn.net/sinat_38316216/article/details/134723690
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。