当前位置: 首页 > 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();}
}

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

相关文章:

【Maven】Nexus私服

6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。一些无法从外部仓库下载到的构件&#xff0c;如项目组其他人员开发的…...

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下AI高中数学教学视频生成技术&#xff1a;利用通义千问、MathGPT、视频多模态大模型&#xff0c;语音大模型&#xff0c;将4个模型融合 &#xff0c;生成高中数学教学视频&#xff0c;并给出实施方案。本文利用专家模…...

探索温度计的数字化设计:一个可视化温度数据的Web图表案例

随着科技的发展&#xff0c;数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面&#xff0c;传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表&#xff0c;该图表通过动态数据可视化展示了温度值&#xff0c;并通过渐变色…...

windows电脑上安装树莓派操作系统

在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...

交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比

在网络管理中&#xff0c;端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像&#xff08;Port Mirroring&#xff09; 定义&#xff1a;端口镜像是将一个或多个源端口的流量复制到一个目标端口&#xff0c;以便于网络管理员能够监控和分析…...

我不是挂王-用python实现燕双鹰小游戏

一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中&#xff0c;常常感觉现实世界是一台精密运作的虚拟机&#xff0c;其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…...

Java:反射、注解

文章目录 1. 反射1-1. 获取Class对象的三种方式1-2. 获取类的构造器、实例化对象1-3. 获取类的成员变量1-4. 获取类的成员方法 2. 注解2-1. 元注解2-2. 解析注解 1. 反射 反射&#xff1a;加载类&#xff0c;并允许以编程的方式解剖类中的各种成员变量、方法、构造器。 1-1. …...

Java 通过枚举类减少if else

目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类&#xff0c;用来表示日本的各种支付方法对应的code import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中 J…...

单链表---移除链表元素

对于无头单向不循环链表&#xff0c;给出头结点head与数值val&#xff0c;删除链表中数据值val的所有结点 #define ListNodeDataType val struct ListNode { struct ListNode* psll;ListNodeDataType val; } 方法一---遍历删除 移除所有数值为val的链表结点&#xff0c;…...

认识redis 及 Ubuntu安装redis

文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…...

Java开发网络安全常见问题

1、敏感信息明文传输 用户敏感信息如手机号、银行卡号、验证码等涉及个人隐私的敏感信息不通过任何加密直接明文传输。 如下图中小红书APP 的手机短信验证码登录接口&#xff0c;此处没有对用户手机号和验证码等信息进行加密传输&#xff0c;可以很简单的截取并开展一些合法的…...

C#基础之委托,事件

文章目录 1 委托1.1 简介1.2 操作使用1.2.1 声明委托&#xff08;Delegate&#xff09;1.2.2 实例化委托&#xff08;Delegate&#xff09;1.2.3 直接调用和invoke1.2.4 Invoke 和 BeginInvoke 1.3 委托的多播1.4 委托的匿名和lambda1.4.1 匿名方法1.4.2 lambda 表达式 1.5 内置…...

nginx配置静态资源的访问

比如静态资源图片位于/mnt/software/nginx/html/static/images目录下&#xff0c;那么nginx.conf中的配置则为&#xff1a; # 静态文件目录 location /static/images/ { root /mnt/software/nginx/html; try_files $uri $uri/ 404; #找不到时提示404 …...

JS的魔法三角:constructor、prototype与__proto__

在JavaScript中&#xff0c;constructor、prototype和__proto__是与对象创建和继承机制紧密相关的三个概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个魔法三角&#xff1a; 1. constructor 定义&#xff1a;constructor是一个函数&am…...

CA系统(file.h---申请认证的处理)

#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件&#xff0c;返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…...

matlab显示sin二维图

1&#xff0c;新建脚本 2、保存脚本 3、脚本命令&#xff1a;clc 清除 脚本命令的信息 clrear all 清除全部 4工作区内容&#xff1a;变量啥的 x0:0.001:2*pi%% 开始 精度 中值 ysin(x) y1cos(x) figure%%产生一个屏幕 plot(x,y)%%打印坐标 title(ysin(x))%%标题 xlabel(…...

验证 kubelet 服务已经停止并且不再生成错误日志

要验证 kubelet 服务已经停止并且不再生成错误日志&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 检查 kubelet 服务状态 首先&#xff0c;确认 kubelet 服务已经停止。 Bash 深色版本 sudo systemctl status kubelet 你应该看到类似以下的输出&#xff0c;表示服…...

【Linux】进程控制-----进程替换

目录 一、为什么要进行进程替换&#xff1a; 二、进程替换的原理&#xff1a; 三、exec家族&#xff1a; 1、execl&#xff1a; 2、execlp&#xff1a; 3、execv&#xff1a; 4、execvp&#xff1a; 5、execle和execve ​编辑 putenv&#xff1a; 一、为什么要进行进程…...

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是&#xff1a;当前操作系统版本为Windows Server 2016 Standard版本&#xff0c;其自带的Microsoft .NET Framework 版本为4.6太低&#xff0c;不满足要求。 根据报错的提示&#xff0c;点击链接…...

使用ECharts创建带百分比标注的环形图

在数据可视化领域&#xff0c;环形图是一种非常有效的图表类型&#xff0c;它能够清晰地展示各部分与整体的关系。今天&#xff0c;我们将通过ECharts来创建一个带百分比标注的环形图&#xff0c;并详细解释如何实现这一效果。 1. 数据准备 首先&#xff0c;我们定义了一些基础…...

Git 代码库中找回丢失文件的实用指南

1. 为什么Git能帮你找回丢失的代码&#xff1f; 作为开发者&#xff0c;你一定遇到过这样的场景&#xff1a;不小心执行了rm -rf删错了文件&#xff0c;或者手滑把整个功能模块给覆盖了。这时候千万别慌&#xff0c;Git就像个贴心的时光机&#xff0c;能帮你找回99%的丢失文件。…...

高效解决付费墙难题:Bypass Paywalls Clean实用技术指南

高效解决付费墙难题&#xff1a;Bypass Paywalls Clean实用技术指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字信息时代&#xff0c;付费墙已成为获取优质内容的主要障碍&…...

这次终于选对了!高效论文写作全流程一键生成论文工具推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。2026年&am…...

HunyuanVideo-Foley入门指南:infer.py命令行参数全量说明与组合技巧

HunyuanVideo-Foley入门指南&#xff1a;infer.py命令行参数全量说明与组合技巧 1. 环境准备与快速部署 HunyuanVideo-Foley是一款强大的视频与音效生成工具&#xff0c;基于RTX 4090D 24GB显存和CUDA 12.4深度优化。在开始使用前&#xff0c;请确保您的硬件配置满足以下要求…...

PhysX 5.1入门实战:从Hello World到刚体模拟的完整流程解析

PhysX 5.1入门实战&#xff1a;从Hello World到刚体模拟的完整流程解析 在游戏开发和物理仿真领域&#xff0c;PhysX引擎一直以其强大的性能和易用性著称。作为NVIDIA旗下的物理引擎解决方案&#xff0c;PhysX 5.1版本带来了更多优化和新特性。本文将带您从零开始&#xff0c;通…...

HunyuanVideo-Foley企业应用:汽车HMI人机交互音效AI生成平台

HunyuanVideo-Foley企业应用&#xff1a;汽车HMI人机交互音效AI生成平台 1. 产品概述 HunyuanVideo-Foley是一款专为企业级音视频生成需求设计的AI平台&#xff0c;特别针对汽车HMI&#xff08;人机交互界面&#xff09;音效场景进行了深度优化。该平台基于RTX 4090D 24GB显存…...

EcomGPT-中英文-7B电商模型与数据库课程设计:构建智能电商问答知识库

EcomGPT-中英文-7B电商模型与数据库课程设计&#xff1a;构建智能电商问答知识库 电商平台每天要处理海量的用户咨询&#xff1a;“这件衣服有M码吗&#xff1f;”、“这个手机和昨天看的那个有什么区别&#xff1f;”、“帮我推荐几款适合送长辈的茶叶”。传统客服要么忙不过…...

LyricsX:重构Mac音乐体验的智能歌词助手

LyricsX&#xff1a;重构Mac音乐体验的智能歌词助手 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 当你在Mac上沉浸于音乐世界时&#xff0c;是否曾因无法同步显示歌词而…...

终极WZ文件编辑器:从地图设计到资源定制的完整工作流

终极WZ文件编辑器&#xff1a;从地图设计到资源定制的完整工作流 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected Harepacker-resurrected是一…...

STM32 USART串口调试避坑指南:从波特率配置到数据帧异常排查

STM32 USART串口调试避坑指南&#xff1a;从波特率配置到数据帧异常排查 在嵌入式开发中&#xff0c;USART串口通信是最基础却又最容易出问题的环节之一。许多开发者都曾经历过这样的场景&#xff1a;代码编译通过&#xff0c;硬件连接无误&#xff0c;但串口就是无法正常通信&…...