当前位置: 首页 > news >正文

【Maven】Nexus私服

6. Maven的私服

6.1 什么是私服

Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的 jar 包,也能从本地上传到私服供其他人使用。

建立了 Maven 私服后,当局域网内的用户需要某个构件时,会先请求本地仓库,若本地仓库不存在所需构件,则请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,再去请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。

6.2 Maven仓库管理器Nexus

6.2.1 什么是Nexus

Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为"Maven 仓库管理器"。 Sonatype Nexus 是当前最流行,使用最广泛的 Maven 仓库管理器。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。

6.2.2 Nexus仓库的类型

Nexus 默认内置了很多仓库,这些仓库可以划分为 3 种类型,每种类型的仓库用于存放特定的 jar 包,具体说明如下:

  • hosted:宿主仓库。部署自己的 jar 包到这个类型的仓库中,包括 Releases 和 Snapshots 两部分,Releases 为公司内部发行版本仓库,Snapshots 为公司内部测试版本仓库。
  • proxy:代理仓库,maven-central。用于代理远程的公共仓库,如 Maven 中央仓库。用户连接私服,私服自动去中央仓库下载 jar 包或者插件。
  • group:仓库组,maven-public。用来合并多个 hosted/proxy 仓库,通常用于配置自己的 Maven 连接仓库组。当我们下载 jar 包时,从仓库组中的每个仓库找一遍,找到后下载。请添加图片描述

6.2.3 Nexus实战

6.2.3.1 运行Nexus控制台

1、以管理员身份打开 cmd,进入到 nexus 安装目录的 bin 目录下,执行命令nexus /run nexus,启动 Nexus 控制台。

启动成功:
请添加图片描述
2、访问 Nexus 工作台:http://localhost:8081/
请添加图片描述
3、登录 Nexus 工作台

输入账号(默认为 admin),密码在提示的文件中(xxxxxxxxxxxx)。在登录过程中,需要设置"使用账号和密码登录",即选择下面的选项,以提高安全性。
请添加图片描述

6.2.3.2 在私服上创建仓库

1、控制台创建仓库

在 Nexus 私服上创建 2 个仓库,myphoenix-snapshot 和 myphoenix-release,分别作为内侧仓库和发布仓库
请添加图片描述
选择 maven2(hosted):
请添加图片描述
取名为 myphoenix-release,类型为 Release,创建:
请添加图片描述
2、将新建仓库添加到仓库组

创建好 myphoenix-release 仓库后,我们可以将自己打包的 jar 包上传到 Nexus 私服。但是,我们还想让其他开发人员能够在私服上下载我们上传的 jar。这时,需要将此仓库添加到仓库组 maven-public 仓库中。
请添加图片描述
以同样的方式在 Nexus 私服上创建个人 snapshot 测试库 myphoenix-snapshot。然后,将 myphoenix-snapshot 添加到仓库组 maven-public 中去。

此时,就将个人的测试仓库和发行仓库添加到 maven-public 中了。
请添加图片描述
在后面的开发工作中,我们可以上传 jar 包到 Nexus 私服,其他开发人员可以从私服下载我们上传的 jar 包了。

3、修改私服配置的远程仓库为阿里镜像仓库

将 maven-central 中的中央仓库地址修改为阿里云远程仓库的地址。

可以看到,maven-central 默认代理的是 Maven 的中央仓库:
请添加图片描述
为了加快访问速度,我们将其修改为阿里的远程仓库:

4、修改本地机器的 Maven 配置

修改 Maven 工具访问私服。

在之前的配置中,Maven 工具直接配置了阿里的远程仓库,现在,我们将其配置为私服的地址,让 Maven 通过私服下载 jar 包。修改 settings.xml 文件:

  • 修改本地仓库,创建一个新的本地仓库,方便观察到从私服下载 jar 包。
  • 修改远程仓库地址为 Nexus 私服的地址。

设置访问 Nexus 私服的用户名和密码

  </servers><server><id>myphoenix-nexus</id><username>admin</username><password>xxxxxxxxxxxx</password></server></servers>

删除原来配置的阿里远程仓库,重新配置 Nexus 私服地址,用于下载 jar 包

  </mirrors><mirror>  <id>myphoenix-nexus</id><mirrorOf>central</mirrorOf><name>mynexus</name>  <url>http://localhost:8081/repository/maven-public/</url>          </mirror></mirrors>

打开项目,发现 Maven 报错,jar 包也没了:
请添加图片描述
刷新 Maven 依赖,发现 Nexus 控制台的 maven-public 中有了 jar 包:
请添加图片描述

6.2.3.3 部署jar包至私服&从私服下载jar包

上传本地 jar 包到 Nexus 私服:

1、创建 maven_nexus 模块。

2、在 maven_nexus 模块中创建一个类 Common,在 Common 类中定义一个 sayHi 方法,模拟开发的功能。

3、在 maven_nexus 的 pom.xml 文件中配置部署参数。

4、在 maven_nexus 的生命周期中,执行 deploy,分别将 Snapshot 和 Release 版本部署到私服上。

  • version 为 1.0-SNAPSHOT,上传至内侧仓库。
  • version 为 1.0.0,上传至发布仓库。

5、创建 maven_nexus_download 模块,模拟同组的其他开发人员,在该模块中编写测试类,尝试引入 maven_nexus 模块依赖。

pom.xml 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.myphoenix</groupId><artifactId>maven_nexus</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!--为项目进行部署(上传至私服)参数配置,以什么用户名和密码,上传到哪个库--><distributionManagement><!--上传至发布仓库--><repository><id>myphoenix-nexus</id><url>http://localhost:8081/repository/myphoenix-release/</url></repository><!--上传至内测仓库--><snapshotRepository><id>myphoenix-nexus</id><url>http://localhost:8081/repository/myphoenix-snapshot/</url></snapshotRepository></distributionManagement></project>

现将内侧版本上传至内侧仓库:
请添加图片描述
查看控制台信息:

C:\Softwares\Developer_Kits\JDK\jdk1.8.0_131\bin\ ......
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< cn.myphoenix:maven_nexus >----------------------
[INFO] Building maven_nexus 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven_nexus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven_nexus ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven_nexus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven_nexus ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven_nexus ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maven_nexus ---
[INFO] Building jar: C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\target\maven_nexus-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ maven_nexus ---
[INFO] Installing C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\target\maven_nexus-1.0-SNAPSHOT.jar to C:\Softwares\Developer_Kits\apache-maven-3.8.8\repository\cn\myphoenix\maven_nexus\1.0-SNAPSHOT\maven_nexus-1.0-SNAPSHOT.jar
[INFO] Installing C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\pom.xml to C:\Softwares\Developer_Kits\apache-maven-3.8.8\repository\cn\myphoenix\maven_nexus\1.0-SNAPSHOT\maven_nexus-1.0-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ maven_nexus ---
Downloading from myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven-metadata.xml
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.jar
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.jar (2.5 kB at 16 kB/s)
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.pom
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.pom (1.2 kB at 8.2 kB/s)
Downloading from myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/maven-metadata.xml
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven-metadata.xml (767 B at 7.8 kB/s)
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/maven-metadata.xml
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/maven-metadata.xml (281 B at 3.8 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.498 s
[INFO] Finished at: 2024-11-28T15:10:38+08:00
[INFO] ------------------------------------------------------------------------Process finished with exit code 0

查看私服上的内侧仓库 myphoenix-snapshot,发现部署成功:
请添加图片描述
将 pom.xml 文件中的 version 修改为 1.0.0,以相同的方式将其部署到私服的发布仓库 myphoenix-release 中。
请添加图片描述
在 maven_nexus_download 模块中,编写测试类,尝试引入发布版本的 maven_nexus-1.0.0.jar。
请添加图片描述
测试类:

public class CommonTest {public void testSayHi() {Common common = new Common();common.sayHi();}
}

测试通过:
请添加图片描述

http://www.lryc.cn/news/495688.html

相关文章:

  • AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。
  • 探索温度计的数字化设计:一个可视化温度数据的Web图表案例
  • windows电脑上安装树莓派操作系统
  • 交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比
  • 我不是挂王-用python实现燕双鹰小游戏
  • Java:反射、注解
  • Java 通过枚举类减少if else
  • 单链表---移除链表元素
  • 认识redis 及 Ubuntu安装redis
  • Java开发网络安全常见问题
  • C#基础之委托,事件
  • nginx配置静态资源的访问
  • JS的魔法三角:constructor、prototype与__proto__
  • CA系统(file.h---申请认证的处理)
  • matlab显示sin二维图
  • 验证 kubelet 服务已经停止并且不再生成错误日志
  • 【Linux】进程控制-----进程替换
  • 安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本
  • 使用ECharts创建带百分比标注的环形图
  • 学习threejs,设置envMap环境贴图创建反光效果
  • go语言里的mkdir mkdirall有什么区别?
  • 使用Python OpenCV实现图像形状检测
  • 继上一篇,设置弹框次数以及自适应图片弹框,部分机型(vivo)老手机不显示的问题
  • 基于RISC-V 的代理内核实验(使用ub虚拟机安装基本环境)
  • 【MMKV】HarmonyOS中的优秀轻量化存储方式
  • docker安装hadoop环境
  • 开源多媒体处理工具ffmpeg是什么?如何安装?使用ffmpeg将M3U8格式转换为MP4
  • 算法刷题Day5: BM52 数组中只出现一次的两个数字
  • 55 基于单片机的方波频率可调
  • 23.useUnload