【SpringBoot】深入解析 Maven 的操作与配置



Maven
1.什么是Maven?
Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包;
2. 创建一个Maven项目
IDEA本身已经集成了Maven,我们可以直接使用,无需安装
以下截图的idea版本为:2022.1.4,不同版本的 idea 界面展示会有所不同
File -> New-> Project

Build System 选择 Maven 后,新创建的项目会多出一个 porm.xml 文件:

3. Maven 项目构建
点击红色框中的 Maven

我们可以对创建的 Maven 进行一些操作

| 编译代码自动生成 target 包 |
我们在运行代码时,会自动添加一个 target 包,这个包存放的是我们编译生成的代码:

| clean |
clean 操作,就是把刚刚生成的 target 包清除:

| package |
package是打包的意思,打包就是把所有的class文件,全部放在一起,打成 jar包 或者 war包
- jar包 和 war包 都是一种压缩文件
- jar 包就是把开发人员已经写好的一些代码进行打包,打好的 jar 包就可以引入到其他项目中,也可以直接使用这些 jar 包中的类和属性,另外也可以打成可执行 jar 包,这样的包就可以通过
java -jar命令来执行- war包可以理解为是一个web项目,里面是项目的所有东西,通常用于网站.
在执行 package 命令时,会把上面的所有命令都执行完:

双击 package:

我们复制上面的路径,来查看打好的 jar 包

4. 配置镜像节点并修改porn 文件
4.1 配置内部镜像节点
根据 idea 所在文件,找到插件文件下的 maven 插件:


我们使用 vscode 打开这个文件,并下划找到 <mirror>这个镜像节点:

上面默认是国外的镜像,我们需要配置国内镜像,把<mirror>标签中的内容替换成下列部分,并且保存:

遇到上述情况,对于 windows 系统,只需要以管理员方式运行 vscode ,即可保存修改后的 setting.xml 文件;
<mirrors><!-- mirror| Specifies a repository mirror site to use instead of a given repository. The repository that| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.|--><!-- 加入如下mirror节点 使用国内阿里云仓库镜像 开始 --><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror><mirror><id>central</id><mirrorOf>*</mirrorOf><name>aliyun central</name><url>https://maven.aliyun.com/repository/central</url></mirror><mirror><id>spring</id><mirrorOf>*</mirrorOf><name>aliyun spring</name><url>https://maven.aliyun.com/repository/spring</url></mirror><!-- 加入如下mirror节点 使用国内阿里云仓库镜像 结束-->
</mirrors>
4.2 创建 Maven 项目

创建好后,我们打开 porm.xml 文件,在这个文件中写入数据库厂商提供的驱动包

4.3 去 maven 商店下载对应的驱动包
打开 maven 商店:
Maven Repository: Search/Browse/Explore (mvnrepository.com)

找到要下载的 maven 选项卡:

4.4 修改 porm.xml 文件并加载
在 porm.xml 文件中添加依赖坐标:

点击刷新按钮,出现下列提示,表示成功添加依赖:


4.5 在依赖中引入本地下载的 jar 包方法




5. Maven Help 插件
当项目比较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突;解决冲突之前,要先找到冲突,我们可以使用Maven Help插件来观察包和包之间的依赖关系;
| 安装插件 |



在我们安装好 Maven helper 后,启用并重启 idea ,点开 porm.xml 文件,在下端显示分析器 Dependency Analyzer,则说明插件启用成功;

打开依赖分析器:

列表/树形式展示的视图效果:

6. Maven 依赖管理
上面说到,Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加 jar 包,
获取的jar包,其实就是依赖.
pom.xml 就是 maven 的
配置文件,用以描述项目的各种信息
6.1 依赖配置
依赖:指当前项目运行所需要的jar包;
比如前面学习 JDBC 时,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中;如果使用Maven,我们只需要在pom.xml中引入mysql-connector-java的依赖即可:
| 1. 在 pom 文件 dependencies 标签内,添加依赖坐标 |

依赖坐标结构如下:

依赖都是由上面这三部分组成的,缺一不可;
| 2.点击刷新按钮,引入新加入的依赖jar包 |

下列的刷新键,和上面的刷新等效:

后续有添加新的jar包,或者修改jar包版本,都需要通过该方式在项目中添加依赖.
| 3. 刷新完之后,就可以在项目中看到新加入的 jar包 |

6.2 依赖传递
早期我们没有使用 maven 时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下.
比如A依赖B,B依赖C,那么A项目引入B的同时,也需要引入C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的:
比如我们要吃火,需要有锅,有调料,有食材,以及确认什么样的锅,什么样的食材.
比如去医院看病,需要带上以往的病历,检查结果,处方等,并且要确认带的资料是正确的,如果日期错了,或者患者错了,带少了,就需要回去重新拿.
但使用maven的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入;
比如吃火锅,现在我们可以点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅,配什么菜
比如去医院看病,借助"互联网",实现了信息共享,只需要带上身份证,以往的病历和检查结果就都可以看到了.

如上图,对于不同版本的 jar 包,默认生效最近距离的版本,如左右分支都有 jar C,默认先生效右分支的;
项目A通过 Maven 引入 JarA 时,会自动引入 JarB 和 Jar C;
JarA 和 项目B 就是 项目A 的直接依赖;JarB,Jar C是间接依赖;
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
我们打开依赖分析器,查看依赖之间的树状视图,我们可以发现,在导入 connector-j 包时,也会自动导入 protobuf 这个包,protobuf 是 connector-j 的直接依赖:

6.3 依赖排除
如果我们在 MavenDemo 项目中,不再需要 protobuf 这个 jar 包,就可以进行排除;
进行依赖排除之前,可能需要先配置好对应的 setting 中的镜像节点;
| 自动排除依赖 |


| 手动排除依赖 |
自动排除依赖操作用的比较少,也不好用,我们可以手动添加 <exclusions> 标签,对不需要的依赖进行排除:

此时,要排除的依赖中不需要写版本号,只需要写 groupId 和 artifactId:
可以先写artifactId,idea 会自动生成 groupId :


如果后续还需要添加依赖,则重新在<dependencies> 标签中再加一个<dependency>即可:

再次刷新,发现不再是引入mysql 的 jar 包后自动引入的 protobuf 了,树状显示没有从属关系:

7. Maven 仓库
我们通过短短几行代码,就把依赖jar包放在了项目里,具体是如何做的呢?

这个代码,我们称之为"坐标",坐标是唯一的;
在Maven中,根据groupld、artifactld、version的配置,来唯一识别一个jar包,缺一不可.
当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找Jar包,并把他下载下来,添加到项目中;这个Jar包下载的地方就称为仓库;
仓库:用于存储资源,管理各种jar包
Maven仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)

7.1 本地仓库
本地仓库:自己计算机上的一个目录(用来存储jar包)
当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包
- 如果有,则在项目直接引用
- 如果没有,则去中央仓库中下载对应的 jar 包到本地仓库

本地仓库地址可以通过 Maven 配置查看:

如果我们的 maven 仓库路径中出现中文,就要对这个路径进行修改,避免出现不必要的麻烦:

找到对应的目录:


把 m2 粘贴到自定义的目录

修改路径即可:

7.2 中央仓库
中央仓库: maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网;
由Maven 团队维护,全球唯一.
仓库地址:https://repo1.maven.org/maven2/
可以通过https://mvnrepository.com 这个网站来查询并下载;
我们可以把自己写好的 Jar 包上传到中央仓库(具备一定的要求),也可以从中央仓库下载Jar包;

查找Jar的坐标
1.访问 https://mvnrepository.com/
2.进行查找,比如mysql

只要已发布 jar 包,漏洞就无法修改,只能在更新新的修复 jar 包的漏洞:



粘贴到依赖中,如果代码显示红色,则只需要点击刷新,会自动下载好 jar 包,并且会在本地仓库的,目录中查找到下载好的 jar 包:

7.3 私有服务器
当Maven需要下载资源的时候
- 先从本地仓库获取,本地仓库存在,则直接返回
- 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回
- 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了…
- 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库里,再为Maven的下载请求,提供服
务; - 私服是很多人在使用的,所以只需要第一个使用者下载一次就可以了

8. 配置国内源
8.1 配置当前项目 setting

把上面的 setting 文件复制到仓库路径:

或者把原来的 setting 文件镜像节点修改为:
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>


8.2 设置新项目的 setting
上面的设置只对当前这个项目生效,我们还需要进一步设置

找到 maven ,修改里面的路径,刚刚设置好的路径都会对以后创建 maven 项目生效:




相关文章:
【SpringBoot】深入解析 Maven 的操作与配置
Maven 1.什么是Maven? Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包; 2. 创建一个Maven项目 IDEA本身已经集成了Maven,我们可以直接使用,无需安装 以下截图的idea版本为ÿ…...
搭建一个简单的node服务,模拟后端接口
目录 一、查看是否安装了node和npm 二、创建一个文件夹,用于放你的node服务代码 三、初始化一个package.json 四、安装 Express(快速搭建服务的框架) 五、创建serve.js 六、运行服务即可 七、测试接口 法一:使用 curl 法…...
【落羽的落羽 C++】C++入门基础:引用,内联,nullptr
文章目录 一、引用1. 引用的概念2. 引用的特点3. 引用的使用4. const引用5. 引用和指针 二、inline内联三、nullptr 一、引用 1. 引用的概念 引用是C中的一个较为重要的概念。它是给已存在变量取的“别名”,编译器不会为引用变量开辟内存空间,它和它引…...
Android 低功率蓝牙之BluetoothGattCallback回调方法详解
BluetoothGattCallback 是 Android 中用于处理蓝牙低功耗(BLE)设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback 的详细解析: 1. onConnectionStateChange 触发时机&am…...
PHP之字符串拼接
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于字符串拼接的信息。 特别注意方法一,在别的语言中基本都是用拼接的。 方法一:(直接拼接) $x 123; echo "hello" . $x;方法二:(多输出拼接) …...
Python的那些事第四十一篇:简化数据库交互的利器Django ORM
Django ORM:简化数据库交互的利器 摘要 随着互联网技术的飞速发展,Web开发越来越受到重视。Django作为一款流行的Python Web框架,以其高效、安全、可扩展等特点受到了广大开发者的喜爱。其中,Django ORM(对象关系映射)是Django框架的核心组件之一,它为开发者提供了一种…...
通过多线程同时获取H264和H265码流
目录 一.RV1126 VI采集摄像头数据并同时编码H264、H265的大概流程编辑编辑 1.1初始化VI模块: 1.2H264、H265的VENC模块初始化: 1.3VI分别绑定H264的VENC层和H265的VENC层: 1.4开启H264线程采集H264的VENC数据ÿ…...
DeepSeek V3 源码:从入门到放弃!
从入门到放弃 花了几天时间,看懂了DeepSeek V3 源码的逻辑。源码的逻辑是不难的,但为什么模型结构需要这样设计,为什么参数需要这样设置呢?知其然,但不知其所以然。除了模型结构以外,模型的训练数据、训练…...
海量数据融合互通丨TiDB 在安徽省住房公积金监管服务平台的应用实践
导读 安徽省住房公积金监管服务平台通过整合全省 17 家公积金中心的数据,致力于实现数据共享、规范化管理与高效数据分析。为了应对海量数据处理需求,安徽省选择 TiDB 作为底层数据库,利用其分布式架构和 HTAP 能力,实现了快速的…...
Sqlserver安全篇之_手工创建TLS用到的pfx证书文件
Sqlserver官方提供的Windows Powershell脚本 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 # Define parameters $certificateParams {Type "SSLServerAuthentication"Subje…...
Linux12-UDP\TCP
一、UDP 1.特点: 尽最大努力交付,存在丢包的可能 无连接 面向数据报 机制简单,传输效率高 2.应用场景: 1.画面传输 VNC 直播:要求实时性高、允许数据丢失、 二、TCP 1.特点: 面向数据流(流式套接字) 建立连接 安全可靠的传输协议 三次握手:TCP建立连接时,…...
Tailwind CSS 问题:npm error could not determine executable to run
问题与处理策略 问题描述 npx tailwindcss init -p在使用 Tailwind CSS 的前端项目中,执行上述指令,即初始化 Tailwind CSS 时,报如下错误 npm error could not determine executable to run# 报错npm 错误无法确定要运行的可执行文件问题…...
C# 实现鼠标轨迹录制与回放自动化功能(附源码)
在软件自动化测试或者重复性办公任务中,鼠标操作的自动化可以大大减少人工干预,提高工作效率。这里将详细介绍如何使用 C# 实现鼠标轨迹的录制与回放功能,代码结构清晰,具有较强的扩展性。 引用 NuGet 包 在开发这个功能时&…...
【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式
与设计模式相处:真实世界中的设计模式 设计模式是软件开发中的经典解决方案,它们帮助我们解决常见的设计问题,并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中,作者通过生动的案例和通俗的语言,深入…...
自由学习记录(42)
可能会出现到后面没有教程可以看,走不动,,但还是尝试吧 过程远比想象的要多 那连Live2d的这些脚本怎么控制的都要了解一下 ------------ 文件类型和扩展名 | 编辑手册 | Live2D Manuals & Tutorials 全部导入之后 在这下载SDK Live2D…...
mac安装nvm=>node=>nrm
下载并安装 NVM 运行以下命令下载并安装 NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash 配置环境变量 vim ~/.zshrc 按 i 将如下代码复制进去,controlc ,再按 :wq完成编辑 export NVM_DIR…...
excel vlookup的精确查询、模糊查询、反向查询、多列查询
目录 入门 精确查询 模糊查询 反向查询 (搭配 if 函数) 多列查询 (搭配 match 函数) 入门 精确查询 需求: 查找 学生编号是008 所在的班级 操作: 在I2单元格输入公式如下,VLOOKUP(H2,B1:E12,4,FALSE), 得出结果 看一下vlookup 公式每一个参数应该怎么写? 语法: vlookup…...
安装remixd,在VScode创建hardhat
在终端,以管理员身份,cmd 需要科学上网 npm install -g remix-project/remixd 在vscode插件中,安装solidity插件,是暗灰色那款 1.将nodeJs的版本升级至18以上 2.在vscode打开一个新的文件,在终端输入 npx hardhat 3.…...
【Python爬虫】利用代理IP爬取跨境电商AI选品分析
引言 随着DeepSeek的流行,越来越多的用户开始尝试将AI工具融入到日常工作当中,借助AI的强大功能提高工作效率。最近又掀起了一波企业出海的小高潮,那么如果是做跨境电商业务,怎么将AI融入工作流中呢?在做跨境电商的时候…...
捣鼓180天,我写了一个相册小程序
🙋为什么要做土著相册这样一个产品? ➡️在高压工作之余,我喜欢浏览B站上的熊猫幼崽视频来放松心情。有天在家族群里看到了大嫂分享的侄女卖萌照片,同样感到非常解压。于是开始翻阅过去的聊天记录,却发现部分图片和视…...
Linux 上离线安装 python3
在Linux系统上进行离线安装 Python3,通常是因为目标机器没有网络连接。以下是一个通用的步骤指南,帮助你在这种情况下成功安装Python 3: 下载安装包 选择一台有网络连接的机器:这台机器的操作系统应该尽可能与目标机器相同或相似…...
洛谷 P1480 A/B Problem(高精度详解)c++
题目链接:P1480 A/B Problem - 洛谷 1.题目分析 1:说明这里是高精度除以低精度的形式,为什么不是高精度除以高精度的形式,是因为它很少见,它的模拟方式是用高精度减法来做的,并不能用小学列竖式的方法模拟…...
图像滑块对比功能的开发记录
背景介绍 最近,公司需要开发一款在线图像压缩工具,其中的一个关键功能是让用户直观地比较压缩前后的图像效果。因此,我们设计了一个对比组件,它允许用户通过拖动滑块,动态调整两张图像的显示区域,从而清晰…...
电商行业门店管理软件架构设计与数据可视化实践
一、行业痛点与核心诉求 在电商多平台运营成为主流的背景下,企业普遍面临三大管理难题: 数据碎片化:某头部服饰品牌2023年运营报告显示,其分布在8个平台的162家门店,日均产生23万条订单数据,但财务部门需要5个工作日才能完成跨平台利润核算。成本核算失真:行业调研…...
基于Arcgis的python脚本实现相邻矢量面的高度字段取平均值
文章目录 背景效果实现逻辑步骤1、准备数据2、python脚本3、执行通过脚本工具箱来执行背景 在地理信息系统(GIS)数据处理或三维建模等实际应用场景中,我们常常会遇到需要对矢量面数据进行精细化处理的需求。其中一个常见的任务便是对相邻的矢量面中的高度字段开展特定操作。…...
基于uniapp的蓝牙打印功能(佳博打印机已测试)
相关步骤 1.蓝牙打印与低功耗打印的区别2.蓝牙打印流程2.1 搜索蓝牙2.2 连接蓝牙 3.连接蓝牙设备4.获取服务5.写入命令源码gbk.jsglobalindex.ts 1.蓝牙打印与低功耗打印的区别 低功耗蓝牙是一种无线、低功耗个人局域网,运行在 2.4 GHz ISM 频段 1、低功耗蓝牙能够…...
Golang的网络流量控制
# Golang的网络流量控制 什么是网络流量控制? 网络流量控制是指针对网络数据传输过程中的流量进行管理和调控的一种技术手段。通过网络流量控制,我们可以对网络中的数据传输速率、带宽使用情况、数据包丢失率等进行监控和调整,以达到优化网络…...
在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案
问题背景 在实际业务中,我们常会遇到数据冗余问题。例如,一个公司表(sys_company)中存在多条相同公司名的记录,但只有一条有效(del_flag0),其余需要删除。删除前需将关联表…...
Python教程(一):基本语法、流程控制、数据容器
Python(一) 文章目录 Python(一)一、基础语法二、数据类型2.1 字符串2.2 空值2.3 类型转换&运算符 三、流程控制3.1 条件判断3.2 循环3.2.1 while循环3.2.2 for循环 四、数据结构4.1 字符串str4.1.1 字符串的格式化输出4.1.1.…...
Spring Boot 3.x 核心注解详解与最佳实践
Spring Boot 3.x 核心注解详解与最佳实践 前言 随着Spring Boot 3.x的正式发布,这个基于Spring Framework 6的里程碑版本带来了诸多新特性。本文将深入剖析Spring Boot 3.x的核心注解体系,结合代码示例讲解其作用及使用场景,助您快速掌握新…...
