【Maven】依赖管理,Maven仓库,Maven核心功能
Maven 是一个项目管理工具,基于 POM(Project Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
大白话:Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar 包
- 项目开发:编译、打包(jar 包)、运行。

- 当
什么是 Maven
Maven 是一个项目管理工具,基于 POM(Project Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
大白话:Maven 是一个项目管理工具,通过 pom. xml 文件的配置获取 jar 包,而不用手动去添加 jar 包
- Maven 简单,高效,可以提高我们的开发效率,减少我们的开发 bug。
- Maven 提供的功能非常多,在这主要体现两方面:
- 项目构建
- 管理依赖
创建一个 Maven 项目
IDEA 本身已经继承了 Maven,我们可以直接使用,无需安装
以下截图的
IDEA版本为:2024.1.2,不同版本的IDEA界面展示会有不同

- 点击
create,就创建好了一个Maven项目

Maven 核心功能
接下来我们结合项目,介绍 Maven 在项目开发中的作用
- 项目构建
- 管理依赖
项目构建
Maven 提供了标准的,跨平台(Linux、Windows、MacOS 等)的自动化项目构建方式
当我们开发了一个项目之后,代码需要经过编译、测试、打包、发布等流程。每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得麻烦。而 Maven 给我们提供了一套简单的命令阿里完成项目的构建

- 比如点击“
package”,就可以完成项目的打包操作

打包就是把所有的 class 文件,全部放在一起,打成 jar 包或者 war 包
jar和war包是一种压缩文件jar包就是把开发人员已经写好的一些代码进行打包。打包好的jar包就可以进入到其他项目中,也可以直接使用这些jar包中的类和属性- 另外,也可以打成可执行
jar包,这样的包就可以通过java -jar命令来执行war包可以理解为是一个web项目,里面是项目的所有东西,通常用于网站
依赖管理
上面说到,Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar 包获取的 jar 包,其实就是依赖
pom.xml就是Maven的配置文件,用以描述项目的各种信息
依赖配置
依赖:指当前项目运行时所需要的 jar 包
比如 JDBC,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中
如果使用 Maven,我们只需要在 pomxml 中引入 mysql-connector-java 的依赖就可以了
<dependencies> <!--里面放置项目的依赖坐标,可以为多个-->
</dependencies>
- 在
pom文件<dependencies>标签内,添加依赖坐标
<dependencies> <groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version>
</dependencies>
-
点击刷新按钮,引入新加的依赖 jar 包
- 后续有添加新的 jar 包,或者修改 jar 包的版本,都需要通过该方式在项目中添加依赖

- 后续有添加新的 jar 包,或者修改 jar 包的版本,都需要通过该方式在项目中添加依赖
-
刷新完之后,就可以在项目中看到新加入的 jar 包
依赖传递
早期我们没有使用 Maven 时,向项目中添加依赖的 jar 包,需要把所有的 jar 包都复制到项目工程下。
比如,A 依赖 B,B 依赖 C,那么 A 项目引入 B 的同时,也需要引入 C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的
- 比如我们要吃火锅,需要有锅、调料、食材,以及确定什么样的锅,什么样的食材
- 比如去医院看病,需要带上以往的病例,检查结果、处方等,并且要确定带的资料是正确的。如果日期错了,或者患者错了,带少了,就需要回去重新拿
但如果是使用 Maven 的话,就可以避免管理所需依赖的关系。我们只需要在 pom 文件中,定义直接依赖就可以了。由于 Maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也一起导入
- 比如吃火锅,现在我们点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅、什么食材
- 比如去医院看病,借助“互联网”,实现了信息互享,只需要带上身份证,以往的病历和检查结果就都可以看到了
Maven 会把在引入一个依赖的时候,会一起把实现这个功能所需要的依赖也一起自动引入
这里引入 mysql,进行打包,protobuf 就是连带的依赖,需要一起引入
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency>
</dependencies>

依赖排除

项目 A ,依赖一个项目 B 和一个 jar 包 A
jar包A依赖jar包B、jar包C- 项目
B里面是各种依赖,其中也用到了jar包C
但是两边都需要引入 jar 包 C,此时我们在哪边进行引入?
一般 jar 包都是向下兼容,高版本可以兼容低版本
最短路径法:
看项目 A 到两个 jar 包 C 放入路径,哪个更短就用哪个
- 左边的是三步
- 右边的是两步
所以就在右边引入jar包
而右边的 jar 包 C 版本比左边的低,无法兼容左边的高版本 jar 包 C。此时就需要将右边的 jar 包 C 从 1.0 升级成 2.0,此时就可以进行指定依赖
- 首先将
1.0的jar包C给排除掉 - 此时项目中就只剩下
2.0的jar包C了,我们在根据路径找jar包C的时候,就只能找到2.0的jar包C了
虽然在上面的图片中看起来是有结构的,谁依赖谁。但是放在项目中,都是平铺直叙的,都是放在一起用的
依赖排除
enclusions 就是排除一些依赖,不会默认把相关的所有依赖都进行引入
上面引入依赖的时候,主依赖和相关依赖都是从网上下载的。需要排除一些依赖,就将网上的地址给出来
Maven Help
当项⽬⽐较复杂时,我们就会有 Jar 包冲突的问题,这时候就需要去解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使⽤ Maven Help 插件来观察包和包之间的依赖关系
- 如果需要排除某个依赖,就右键点击,选择
Exclude
依赖的坐标
这个代码,我们称之为“坐标”,也就是唯一的
在 Maven 中,根据 groupId、artfactId、version 的配置,来唯一识别一个 jar 包,缺一不可。当我们在 pom 文件中配置完依赖之后,点击刷新, Maven 就会根据坐标的位置,去仓库里寻找 jar 包,并把它下载下来,添加到项目中,这个 jar 包下载的地方就叫仓库
仓库:用来存储资源,管理各种 jar 包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version>
</dependency>
Maven 仓库
Maven 仓库分为两种:
-
本地仓库
仓库在你本机电脑上,是本地仓库。其他都是远程仓库 -
远程仓库
远程仓库
中央仓库
全球唯一,地址为:
https://repo1.maven.org/maven2/springframework/
里面东西太多了,不好找。可以在这里面进行快速查找:
https://mvnrepository.com
- 私有服务器
- 其他公共的
Maven 版本选择哪个?
- 没漏洞的
- 选择次新版本
- 选择人多的
不严格,推荐是基于大家不知道用哪个的情况,对这个 jar 包不熟的情况
jar 包下载路径
- 先去本地仓库查找,如果没有,就去中央仓库查
- 如果中央仓库没有,就下载失败,报错
- 如果中央仓库有,jar 包就从中央仓库下载到本地仓库
- 项目从本地仓库中获取


本地仓库原来是空的,随着使用,里面的包越来越多(从中央仓库下载过来的)
私有服务器
中央仓库里面的包是全世界的都可以看到,而有一些不想公开的 jar 包就放在私服中(私有服务器)
- 有账号和密码,公司里面可以用

- 有权限的人,一起使用的
- 如果遇到私服中不存在的 jar 包,第一个人下载之后,后面的人就从私服中可以获取到了,无需再下载了
其他公共服务器
- 阿里云
- 华为云
因为中央仓库在国外,所以下载起来会⽐较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源
阿里云就相当于是把中央仓库弄了一个镜像,放在了国内,并公开给人用
如果路径中有中文,修改一下 Maven 本地仓库路径
相关文章:
【Maven】依赖管理,Maven仓库,Maven核心功能
Maven 是一个项目管理工具,基于 POM(Project Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件 大白话:Maven 是一个项目管理工…...
Android wifi信号和漫游信号设置
1.wifi信号 /packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java Deprecated public static int calculateSignalLevel(int rssi, int numLevels) { if (rssi < MIN_RSSI) { //*/update wifi signal return 1;…...
检查cuda和显卡的可用性
检查cuda和显卡的可用性 import torch device_gpu torch.device(cuda if torch.cuda.is_available() else cpu) print(device_gpu) print(torch.cuda.is_available())...
Kotlin:2.0.20 的新特性
一、概述 Kotlin 2.0.20英文版官方文档 Kotlin 2.0.20发布了!这个版本包括对Kotlin 2.0.0的性能改进和bug修复,我们在其中宣布Kotlin K2编译器为Stable。以下是本次发布的一些亮点: 数据类复制函数将具有与构造函数相同的可见性来自默认目标层次结构的源集的静态访…...
Python内存管理与泄漏排查实战
Python内存管理与泄漏排查实战 Python作为一种高级编程语言,因其易读性和丰富的标准库而备受开发者青睐。然而,随着项目的复杂度增加,内存管理问题可能会影响程序的性能,甚至导致内存泄漏。为了构建健壮且高效的应用程序…...
828华为云征文|华为云Flexus云服务器X实例搭建部署H5美妆护肤分销商城、前端uniapp
准备国庆之际,客户要搭个 H5 商城系统,这系统好不容易开发好啦,就差选个合适的服务器上线。那可真是挑花了眼,不知道哪款性价比高呀!就像在琳琅满目的选择前。最终慧眼识珠,选择了华为云 Flexus X。至于为什…...
初学51单片机之I2C总线与E2PROM二
总结下上篇博文的结论: 1:ACK信号在SCL为高电平期间会一直保持。 2:在字节数据传输过程中如果发送电平跳变,那么电平信号就会变成重复起始或者结束的信号。(上篇博文的测试方法还是不能够明确证明这个结论࿰…...
Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka
文章目录 前言4 Kafka基准测试4.1 基于1个分区1个副本的基准测试4.2 基于3个分区1个副本的基准测试4.3 基于1个分区3个副本的基准测试 5 Java编程操作Kafka5.1 引入依赖5.2 向Kafka发送消息5.3 从Kafka消费消息5.4 异步使用带有回调函数的生产消息 6 幂等性6.1 幂等性介绍6.2 K…...
结合vueuse实现图片懒加载
介绍 为什么要有懒加载? 在一个网页中如果有很多张图片,那么用户初进这个页面的时候不必一次性把所有图片都加载出来,否则容易造成卡顿和浪费。应该是,用户的视图页面滑到该图片的位置,然后再把该图片加载出来。 前置…...
Mysql数据库--聚合查询、分组查询、联合查询(不同的连接方式)
文章目录 1.查询的进阶版1.1查询搭配插入进行使用1.2聚合查询1.3group by分组查询1.4联合查询之笛卡尔积1.5左外连接,右外连接介绍join on1.6自连表 1.查询的进阶版 1.1查询搭配插入进行使用 我们首先创建两张表,一个叫做student,一个叫做student2,两个…...
计算机视觉——图像修复综述篇
目录 1. Deterministic Image Inpainting 判别器图像修复 1.1. sigle-shot framework (1) Generators (2) training objects / Loss Functions 1.2. two-stage framework 2. Stochastic Image Inpainting 随机图像修复 2.1. VAE-based methods 2.2. GAN-based methods …...
集中式架构和分布式架构
数据是企业的核心资产和战略资源。面对爆炸性的数据增长,如何有效地组织、管理和利用数据成为企业的重大挑战。数据架构作为企业数据管理的蓝图和框架,发挥重要作用。本文就来详细说下当下主流的两种数据架构的类型。 首先明确数据架构定义:…...
Redis: 集群高可用之故障转移和集群迁移
故障转移 故障转移,包括自动故障转移和手动故障转移 1 )自动故障转移 Redis 集群,主节点挂了,从节点可以顶上来继续提供服务常用制造故障的两种方式 第一,对其中一个节点进行 SHUTDOWN 操作第二,kill 掉…...
记账软件在线、会计记账网站、财务记账官网、记账云、云记账、在线免费做账以及易舟云财务软件
记账软件在线、会计记账网站、财务记账官网、记账云、云记账、在线免费做账以及易舟云财务软件,以下是一些详细的介绍和推荐: 一、记账软件在线与会计记账网站 记账软件和会计记账网站是现代财务管理中不可或缺的工具,它们能够帮助企业或个人…...
Elasticsearch基础_3.基础操作
文章目录 一、索引操作1.1、创建索引1.2、删除索引 二、映射操作2.1、查看映射2.2、扩展映射 三、文档操作3.1、单条写入文档3.2、更新单条文档3.3、查看单条文档3.4、删除单条文档3.5、根据条件删除文档 一、索引操作 1.1、创建索引 PUT /${index_name} {"settings&quo…...
PHP永久性Cookie的含义
PHP中的永久性Cookie(也称为持久性Cookie)是指在用户的计算机上存储的一种持久性的HTTP Cookie。与常规的临时Cookie不同,永久性Cookie在浏览器关闭后依然保留,并且可以在用户下次访问该网站时被读取和使用。 主要特点 持久存储…...
瑜伽培训行业为何要搭建自己的专属知识付费小程序平台?集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统
在当今快节奏的生活中,瑜伽作为一种舒缓压力、增强体质的生活方式,受到了越来越多人的青睐。瑜伽培训行业也随之蓬勃发展,但如何在激烈的市场竞争中脱颖而出,成为众多瑜伽培训机构面临的一大挑战。搭建自己的专属知识付费小程序平…...
FFT 分析进阶-笔记
FFT 分析进阶 边界不连续与泄漏效应解决方法增加窗函数海宁窗与哈布什窗混叠效应频率高到什么程度会出现混叠现象呢?那我们有办法去应对这个混叠吗?经典平均指数平均关于结果的显示模式FFT计算的三个常见的范例计算FFT图谱中某一段的总值,图中…...
毕业设计_基于springboot+layui+mybatisPlus的中小型仓库物流管理系统源码+SQL+教程+可运行】41004
毕业设计_基于springbootlayuimybatisPlus的中小型仓库物流管理系统源码SQL教程可运行】41004 下载地址: https://download.csdn.net/download/qq_24428851/89843203 技术栈 后端:springboot、mybatis-plus、shiro 前端:layUI 存储&…...
ROS基础入门——实操教程
ROS基础入门——实操教程 前言 本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记。 Ruby Rose,放在这里相当合理 本文初编辑于2024年10月4日 C…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
