【Spring】1. Maven项目管理

📚博客主页:爱敲代码的小杨.
✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》
❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️
🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!
小杨近些在学习人工智能方面的知识,发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录
- 1. 什么是 Maven
- 2. 创建 Maven 项目
- 3. Maven 的作用
- 3.1 统一项目结构
- 3.2 项目构建
- 3.3 依赖管理
- 依赖配置
- 依赖传递
- 依赖排除
- 4. Maven 仓库
- 4.1 本地仓库
- 4.2 中央仓库
- 查找 jar 包的地址
- 4.3 私有服务器,也称私服
- 4.4 Maven 设置国内源
1. 什么是 Maven
官方描述:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
翻译:Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从一个中心信息片段管理项目的构建、报告和文档
Maven 是⼀个项目管理工具, 通过 pom.xml文件的配置获取 jar包,而不用手动去添加 jar包。
前面学习 JDBC 的时候,就需要手动的去添加
jar包,学习了 Maven 就不用去手动添加jar包了,只需要添加几行代码就可以添加jar包了。
🚩:为什么要学习 Maven?
简单, 方便, 提高我们的开发效率, 减少我们的开发Bug.
2. 创建 Maven 项目
IDEA 本身已经集成了 Maven , 我们可以直接是用, 无需安装
File->New->Project

- 填写项目名、存放位置、创建方式选择 Maven、选择JDK版本

- 点击
Create,就创建好了 Maven 项目

3. Maven 的作用
3.1 统一项目结构
统一项目结构:提供标准、统一的项目结构
任何编译器创建 Maven 项目,其项目的结构都是一样的

3.2 项目构建
Maven 提供了标准的,跨平台(Linux, Windows, MacOS等)的自动化项目构建方式
当我们开发了⼀个项目之后, 代码需要经过编译, 测试, 打包, 发布等流程, 每次代码的修改, 都需要经过这些流程, 如果代码反复调试修改, 这个流程就需要反复进行, 就显得特别麻烦, 而 Maven 给我们提供了⼀套简单的命令来完成项目的构建

比如:是用package命令就可以对项目进行打包操作

打包就是把所有的 class文件, 全部放在一起, 打成 jar 包或者 war包
jar包和war包都是⼀种压缩文件
jar包就是把开发人员已经写好的⼀些代码进行打包. 打好的jar包就可以引入到其他项目中, 也可以直接是用这些jar包中的类和属性. 另外也可以打成可执行jar包, 这样的包就可以通过java -jar命令来执行war包可以理解为是⼀个web项目,里面是项目的所有东西, 通常用于网站.
3.3 依赖管理
依赖管理:方便快捷的管理项目的依赖的资源(jar包),避免版本冲突的问题
pom.xml就是 Maven 的配置文件,用来描述项目的各种信息
依赖配置
依赖:只当前项目运行的所需要的 jar包
比如:学习 JDBC 的时候,我们需要手动下载mysql-connector-java-5.1.47的包,并添加到项目中

如果是用 Maven, 我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了
<dependencies><!--放置项目需要的依赖坐标,可以多个-->
</dependencies>
- 在
pom.xml文件中<dependencies>标签内,添加依赖坐标
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
</dependencies>
- 点击刷新按钮, 引入新加入的依赖
jar包
后续有添加新的
jar包, 或者修改jar包版本, 都需要通过该方式在项目中添加依赖.

- 刷新完之后, 就可以在项目中看到新加入的
jar包

依赖传递
早期我们没有是用 maven时, 向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下.
比如 A 依赖 B, B依赖C, 那么 A项目引入 B 的同时, 也需要引入C, 如果我们手动管理这个依赖, 这个过程就会比较麻烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的?
但是用 maven 的话, 就可以避免管理所需依赖的关系。我们只需要在pom.xml文件中, 定义直接依赖就可以了, 由于 maven 的依赖具有传递性,所以会自动把所依赖的其他jar包也⼀起导入

如上图, 项目A 通过Maven 引入 Jar A 时, 会自动引入 Jar B 和 Jar C.
Jar A 和 项目B就是项目 A的直接依赖.
Jar B, Jar C是间接依赖.
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖排除
- 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.6</version><!--排除依赖--><exclusions><exclusion><artifactId>spring-jcl</artifactId><groupId>org.springframework</groupId></exclusion></exclusions>
</dependency>
4. Maven 仓库
通过几行代码就可以把需要的 jar包放进项目中,是如何做到的呢?
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
</dependencies>
这个代码, 我们称之为 “坐标”, 也就是唯一的.
在 Maven中,根据groupId、artifactId、version的配置,来唯一识别一个 jar包,缺一不可。
当我们在pom.xml文件中配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库里寻找 jar包, 并把他下载下来, 添加到项目中. 这个jar包下载的地方就称为仓库.
仓库:用于存储资源,管理各种jar包

Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包, 插件等).

Maven仓库分为两大类: 本地仓库和远程仓库. 其中远程仓库又分为中央仓库, 私服 和其他公共库
4.1 本地仓库
本地仓库: 自己计算机上的一个目录(用来存储jar包)
当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包
- 如果有,则在项目直接引入
- 如果没有,则去中央仓库中下载对应的
jar包到本地仓库

idea配置 Maven
file->Settings->Maven

查看该仓库目录 可以看到该目录下有很多的jar(最开始是空的, 随着Maven的使用, 该仓库下文件会越来越多)

4.2 中央仓库
中央仓库: maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联网. 由 Maven 团队维护,全球唯一.
仓库地址:网址
可以通过https://mvnrepository.com 这个网址来查询并下载jar包
查找 jar 包的地址
- 访问 https://mvnrepository.com
- 进行查找,比如 mysql

- 选择添加的
jar包

- 查看
jar包坐标

4.3 私有服务器,也称私服
私服:一般由公司搭建的私有仓库。
私服属于某个公司,或者某个部门 往往需要⼀定权限.
有了私服之后, Maven依赖下载的顺序又发生了变化

当Maven需要下载资源的时候
- 先从本地仓库获取, 本地仓库存在, 则直接返回
- 如果本地仓库没有, 就从私服请求, 私服存在该资源, 就直接返回
- 如果私服上不存在该资源,则从中央仓库下载, 中央仓库不存在, 就报错了…
- 如果中央仓库中存在, 就先缓存在私服上之后,再缓存到本地仓库⾥, 再为Maven的下载请求提供服务
4.4 Maven 设置国内源
因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源
如何设置国内源
File->Settings

- 查看配置文件的地址, 如上图所示, Maven配置文件地址为:
C:\APP\Java\apache-maven-3.6.1\conf\settings.xml
不同电脑设置的Maven路径不同
settings和repository可以修改设置为其他路径, 两个路径不要有中⽂
- 配置国内源
Maven 仓库默认是在国外官网, 国内使用时会比较慢,我们可以更换为阿里云的仓库
打开settings.xml, 在 mirrors 节点上,添加内容如下:
<mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿⾥云公共仓库</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

相关文章:
【Spring】1. Maven项目管理
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…...
工业制造领涉及的8大常见管理系统,如mes、scada、aps、wms等
在工业生产和制造领域有一些常见的管理系统,很多小伙伴分不清,这次大美B端工场带领大家了解清楚。 MES(Manufacturing Execution System,制造执行系统): MES是一种用于监控、控制和优化生产过程的软件系统…...
Lianwei 安全周报|2024.06.17
新的一周又开始了,以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 IDC:2024 第一季度中国安全硬件市场规模…...
海量数据处理利器 Roaring BitMap 原理介绍
作者:来自 vivo 互联网服务器团队- Zheng Rui 本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用,分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。 一、引言 在进行大数据开发时,…...
Javaweb登录校验
登录校验 JWT令牌的相关操作需要添加相关依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>一、摘要 场景:当我们想要访问一个网站时&am…...
vxe-table 列表过滤踩坑_vxe-table筛选
但是这个过滤输入值必须是跟列表的值必须一致才能查到,没做到模糊查询的功能,根据关键字来过滤并没有实现。 下面提供一下具体实现方法:(关键字来过滤) filterNameMethod({ option, row }) {if (row.name.indexOf(op…...
计算机网络:网络层 - IP数据报的转发
计算机网络:网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时,是通过报文中的目的地址字段来转发的,也即是说路由器只知道终点的IP地址,根…...
颠覆与创新:探寻Facebook未来的发展路径
Facebook,这个曾经引领社交网络革命的巨头,在如今竞争激烈的科技市场中,正面临着前所未有的挑战和机遇。如何在不断变化的数字世界中保持竞争力,成为业界领先者,这是摆在Facebook面前的重要课题。本文将探寻Facebook未…...
太湖远大毛利率下滑:研发费用率远低同行,募投项目合理性疑点重重
《港湾商业观察》黄懿 6月20日,浙江太湖远大新材料股份有限公司(以下简称“太湖远大”,873743.NQ)即将迎来过会。 2023年11月30日,太湖远大所提交的上市申请材料正式获北交所受理,保荐机构为招商证券&…...
赶紧收藏!2024 年最常见 20道设计模式面试题(八)
上一篇地址:赶紧收藏!2024 年最常见 20道设计模式面试题(七)-CSDN博客 十五、模板方法模式是如何在父类中定义算法框架的? 模板方法模式通过在父类(通常是一个抽象类)中定义算法的骨架&#x…...
JAVA学习-练习试用Java实现“比较版本号”
问题: 给定两个版本号 version1 和 version2 ,请比较它们。 版本号由一个或多个修订号组成,各修订号由一个 . 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,…...
云原生分级SLA
云原生分级SLA(Service Level Agreement,服务等级协议)规则是为了确保云服务提供商和客户之间对服务性能、可用性和其他关键指标有明确的理解和期望。这些规则通常基于业务需求和技术实现来制定,并根据服务的不同级别进行分级。以…...
java干货 线程间通信
文章目录 一、线程间通信1.1 为什么要处理线程间通信?1.2 什么是等待唤醒机制? 二、等待唤醒机制使用2.1 等待唤醒机制用到的方法2.1.1 wait2.1.2 notify 2.2 线程通信代码实践2.2.1 重要说明2.2.2 代码 一、线程间通信 1.1 为什么要处理线程间通信&…...
【人机交互 复习】第6章 交互式系统的设计
一、设计框架 1.在建立了一组需求之后,设计即将开始,建议采取自上面下的方式,首先把重点放在大的方面,生成低保真且不包含具体细节的方案,一般通过写剧本来确定交互设计模式与逻辑。 2.设计框架: 先站在一个…...
1-函数极限与连续
1 2 平方项没有考虑到(其正负)...
【C++题解】1670 - 象棋大赛
问题:1670 - 象棋大赛 类型:分支问题 题目描述: 市里要组织象棋大赛,年龄在 8∼30 周岁之间的选手可以报名参赛。为了公平起见,大赛组委会将选手们分了青年组、少年组和儿童组,大赛组委会规定:…...
Samba:用于高效无限上下文语言建模的简单混合状态空间模型
Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling 📜 文献卡 Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling作者: Liliang Ren; Yang Liu; Yadong Lu; Yelong Shen; …...
通俗易懂的ChatGPT原理简介
一、引言 随着人工智能的发展,聊天机器人已经成为我们生活中的常见工具。而在众多聊天机器人中,ChatGPT 无疑是最受关注的一个。ChatGPT 是由 OpenAI 开发的一种基于生成式预训练模型(GPT)的大型语言模型。本文将通俗易懂地介绍 …...
你认为 AI 作图程序「MidJourney」有哪些比较好用的关键词?
玩了一段时间的MidJourney,打算把这个回答做成资源帖。也欢迎在评论区补充讨论。 MidJourney的极简指南 快速上手 装discord,或者直接打开网址 https://discord.gg/midjourney 注册用户。进入Midjourney的官方服务器后,在左侧栏找一个newb…...
9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法
execute()方法用于执行SQL语句,其语法格式如下: jdTemplate.execute("SQL 语句");下面以创建数据表的SQL语句为例,来演示excute()方法的使用,具体步骤如下。 1、创建数据库 在MySQL中,创建一个名为spring的…...
从Desat故障到设计哲学:构建高鲁棒性控制器的系统化方法
1. 从Desat故障现象说起:IGBT的"心脏病发作" 第一次遇到Desat故障报警时,我盯着示波器上跳动的波形百思不得其解——明明电路设计完全参照了芯片厂商的参考方案,为什么样机在高温测试时频繁报错?这种经历相信很多电力电…...
NoFences:重构桌面空间的区域化引擎
NoFences:重构桌面空间的区域化引擎 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 副标题:三步打造个性化桌面系统 痛点分析:你的桌面是…...
Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率
Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率 1. 为什么需要优化本地模型的中文理解能力 去年冬天,当我第一次尝试用OpenClaw自动化整理电脑上的文件时,遇到了一个令人哭笑不得的场景。我对它说"把上周下载的PDF文件按日期…...
Ansys与Adams刚柔耦合仿真实战:从模态分析到MNF文件生成全流程解析
1. 为什么需要刚柔耦合仿真? 刚接触机械系统仿真的朋友可能会有疑问:为什么不能直接用刚性体模型做动力学分析?这个问题我刚开始做项目时也纠结过。简单来说,现实世界中没有绝对的刚性体,所有物体在受力时都会发生形变…...
NVIDIA GPU监控效能深度解析:nvitop如何破解多用户环境资源管理难题
NVIDIA GPU监控效能深度解析:nvitop如何破解多用户环境资源管理难题 【免费下载链接】nvitop An interactive NVIDIA-GPU process viewer and beyond, the one-stop solution for GPU process management. 项目地址: https://gitcode.com/gh_mirrors/nv/nvitop …...
2026最新:宁波高新区代理记账收费标准公布,科技企业月均300元起
上周一位在高新区软件园创业的李总问我:"我们公司刚成立,就3个人,找一个代理记账一个月要花多少钱?"这个问题几乎是每个高新区创业者都会问的。作为在宁波服务了15年的财税机构,今天我就给大家说个明白。高新…...
电商数据仓库实战:从概念模型到物理模型的完整设计流程(含PostgreSQL示例)
电商数据仓库实战:从概念模型到物理模型的完整设计流程(含PostgreSQL示例) 在电商行业,数据已成为驱动业务增长的核心引擎。一个设计精良的数据仓库能够将分散的交易记录、用户行为和商品信息转化为可操作的商业洞察。本文将带您深…...
AgentCPM深度研报助手C语言文件操作实战:批量处理本地研报文本文件
AgentCPM深度研报助手C语言文件操作实战:批量处理本地研报文本文件 你是不是也遇到过这样的场景?手头有一堆下载好的行业研报,有PDF,有TXT,堆在文件夹里。想快速了解每份报告的核心观点,但一份份打开看&am…...
如何快速掌握React Email Editor:深入理解拖拽邮件编辑器的实现原理
如何快速掌握React Email Editor:深入理解拖拽邮件编辑器的实现原理 【免费下载链接】react-email-editor Drag-n-Drop Email Editor Component for React.js 项目地址: https://gitcode.com/gh_mirrors/re/react-email-editor React Email Editor是一个功能…...
Drizzle ORM性能优化终极指南:查询优化与缓存策略详解
Drizzle ORM性能优化终极指南:查询优化与缓存策略详解 【免费下载链接】drizzle-orm drizzle-team/drizzle-orm: 是一个基于 C 的 ORM(对象关系映射)库,支持 MySQL 和 SQLite 数据库。适合对 C、数据库开发以及想要使用轻量级 ORM…...

