前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Maven 之 依赖管理

Maven 之 依赖管理

作者头像
叫我阿杰好了
发布于 2023-10-17 06:40:01
发布于 2023-10-17 06:40:01
1830
举报

我们开发一个工程需要用到大量得jar包,而这些jar 包就是我们所说得依赖,一个项目可以配置多个依赖。

1、依赖传递

我们来看一下今天用来演示的工程。

这个工程它运行需要用到这么多的依赖!

首先依赖,它可以设置多个,那么在设置的时候,我们就会发现一些小问题,我们会发现上图中,有些依赖它是有小箭头的,而有些它是没有的。

那这个箭头又代表了什么呢?这说明这个依赖它又依赖了别的东西。

小案例:

小案例:

ssm

ssm_01_pojo

我们可以看到ssm 和 ssm_01_pojo 都引入 ssm_02_dao。

ssm_02_dao 里面是什么东西呢?

接下我们将 ssm 的 pom 文件 中 的 ssm_02_dao 注释掉。

我们再来看看有没有影响。

这里我们看到,它是没有报错的,为什么呢?

因为我们的依赖具有传递性,虽然我们的ssm 将ssm_02_dao 注释掉了,但是 ssm_01_pojo 也导入了 ssm_02_dao,这就是依赖的传递性。

依赖的传递性也分为三种。

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

直接依赖就是我们直接写的依赖,间接依赖就是我们写的依赖又依赖的其他的依赖。

接下来我们来讲一下特殊优先。

这里我们要了解一下说明是依赖冲突,这个问题很常见,比如 我们 都用mybatis ,你用 2.0 我用 3.0 ,这不就冲突了,那到底要用谁的呢?

这里我们用一个小案例演示一下。

上面我配置两个junit 的版本 ,右边它显示的 依赖版本是 4.10。这会不会跟位置有关系,我们将它们两个交换 一下位置。

发现,它们还真的变了,这个就说明了,当我们同一个依赖写了两个版本,它会以最后一个为准。

2、可选依赖

现在呢,我们已经知道了,依赖是有传递性的,那现在就有一个问题,我现在开发了一个模块,里面依赖了一些东西,现在呢你想用我的东西,但是我现在不想让你知道 我依赖了哪些东西,我想把这些东西隐藏起来。

为什么要这样呢?

比如,我现在用的mybatis用的是2.0版本,但是你用的是3.0 的版本,那这不就又版本冲突的问题了,所以干脆,你那里用啥我不管,但是我这里用啥隐藏起来,你那里看不到,这样不就没有冲突了。

案例:

那这个东西怎么设置呢?其实很简单。

就是这个<optional></optional>标签。

true 就是隐藏 反之就是不隐藏。

我们看这个 TeacherImpl 是不是就报错了。

3、 排除依赖

排除依赖跟可选依赖优点相似,可选依赖是自己隐藏,不对外公布。

排除依赖就是,我导入了你的依赖,而你的依赖中有写依赖是我不想要的,这个时候我就可以使用排除依赖进行排除。

我往下看看这个排除依赖如何使用。

案例 :

4、可选依赖和排除依赖的区别

若有收获,就点个赞吧

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2. 依赖管理
我们现在已经能把项目拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其 pom.xml 使用标签来进行 jar 包的引入即可。
捞月亮的小北
2023/12/01
1830
2. 依赖管理
【Maven】分模块开发与设计与依赖管理
目录 一、分模块开发与设计 1. 分模块开发的意义 2. 分模块开发(模块拆分) 二、依赖管理 1. 依赖传递 2. 可选依赖 3. 排除依赖 4 可选依赖和排除依赖的区别 一、分模块开发与设计 1. 分模块开发的意义 问题导入 分模块开发对工程有什么好处? 模块拆分原则 目的:项目的扩展性变强了,方便其他项目引用相同的功能。 将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享 2. 分模块开发(模块拆分) 问题导入 一个完整的工程依据什么来进行模块的拆分? 2.1 创建M
陶然同学
2023/02/24
6610
【Maven】分模块开发与设计与依赖管理
Maven中的依赖管理
文章目录 1. 依赖配置 2. 依赖传递 2.1 依赖传递冲突问题 2.2 可选依赖 2.3 排除依赖 3. 依赖范围 4. 依赖范围传递性 1. 依赖配置 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖 <!-- 设置当前项目所依赖的所有jar--> <dependencies> <!— 设置具体的依赖--> <dependency> <!— 依赖所属群组id--> <groupId>junit</groupId> <!
鱼找水需要时间
2023/02/16
8380
Maven中的依赖管理
项目管理构建工具——Maven(高阶篇)
Maven作为我们项目管理构建的常用工具,具备许多功能,在这篇文章中我们来仔细介绍
秋落雨微凉
2022/10/25
1.4K0
项目管理构建工具——Maven(高阶篇)
Maven依赖冲突问题
依赖冲突是指:在 Maven 项目中,当多个依赖包,引入了同一份类库的不同版本时,可能会导致编译错误或运行时异常。
政采云前端团队
2024/01/31
5870
Maven依赖冲突问题
Maven(六)之依赖管理
前面讲了maven一些关于Maven的简单知识,今天我给大家分享一些Maven的依赖管理。我相信用过maven的人都知道,它很重要的功能就是通过依赖来添加jar包。 让我们领略一下Maven是怎么管理我们的jar包的。 一、Maven坐标 1.1、数学中的坐标   在平面上,使用 X 、Y 两个向量可以唯一的定位平面中的任何一个点   在空间中,使用 X、Y、Z 三个向量可以唯一的定位空间中的任意一个点 1.2、Maven 中的坐标   俗称 gav:使用下面三个向量子仓库中唯一定位一个 Maven 工程
用户1195962
2018/01/18
8670
Maven(六)之依赖管理
Maven详解(五)------ 坐标的概念以及依赖管理
IT可乐
2018/01/04
1.6K0
Maven详解(五)------ 坐标的概念以及依赖管理
Maven 基础
​ groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybaits) ​ artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS) ​ version:定义当前项目版本号 packaging:定义该项目的打包方式
用户9615083
2022/12/25
3710
Maven 基础
Maven系列第3篇:详解maven解决依赖问题
maven是apache软件基金会组织维护的一款自动化构件工具,专注服务于java平台的项目构件和依赖管理。
路人甲Java
2019/11/14
2K0
Maven系列第3篇:详解maven解决依赖问题
[Maven进阶]聚合和继承
我们的项目已经从以前的单模块,变成了现在的多模块开发。项目一旦变成了多模块开发以后,就会引发一些问题,在这一节中我们会介绍两个内容聚合和继承,用这两个知识来解决下分模块后的一些问题。
十八岁讨厌编程
2022/12/10
8450
Maven相关知识点整理
maven构建的web项目与普通的java项目区别在于,少了一个wepapp文件
大忽悠爱学习
2021/11/15
1.5K0
【JavaWeb】maven依赖管理
记录学习JavaWeb课程中的部分知识点,包括maven依赖管理、maven高阶、Mybatis、SpringBoot自动配置等。本篇是关于maven对依赖包管理的内容。
客怎眠qvq
2023/10/23
2460
Maven 依赖管理(上)
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
陈不成i
2021/07/15
4890
javaweb-maven-2-59
上半部分在javaweb-maven-1-43 https://blog.csdn.net/lidashent/article/details/108302467 项目地址:https://github.com/Jonekaka/javaweb-maven-2-59
全栈程序员站长
2021/05/19
5310
说说maven依赖冲突,依赖调解,依赖传递和依赖范围
当前项目引入了一个依赖,该依赖的依赖也会被引入项目。更加准确的说法是,maven会解析直接依赖的POM,将那些必要的间接依赖,以传递依赖的形式引入到当前项目中。
用户1289394
2021/01/20
1.3K0
Maven 依赖管理
在我们创建使用 Maven 项目的过程中,当需要用到第三方的控件时,都是通过依赖管理来达成,也就是 Maven 项目中必有的 pom.xml 文件。POM(Project Object Model),即 「项目对象模型」,其中定义了 Maven 项目的形式。因此,pom.xml 可以看做是 Maven 项目中的导航。
村雨遥
2020/07/16
9160
Maven入门
在学习Maven之前,我们先来看一下我们现在做的项目都有哪些问题。假设你现在做了一个crm的系统,项目中肯定要用到一些jar包,比如说mybatis,log4j,JUnit等,除了这些之外,你有可能用到你的同事开发的其他的东西,比如说别人做了一个财务模块或做了一个结算的模块,你在这里边有可能要用到这些东西。
楠羽
2022/11/18
4550
Maven入门
Maven 高级
例如,父工程和子工程的版本号一样,可以直接使用父工程的版本内置属性${version}:
用户9615083
2022/12/25
1.1K0
Maven 高级
maven详解
自定义位置:在安装目录下conf/settings.xml中<localRepository>添加自定义目录,该标签已被注释需要自行查找,例如
CODER-V
2023/03/04
3.1K0
maven详解
【Maven】依赖管理,Maven仓库,Maven核心功能
Maven 是一个项目管理工具,基于 POM(Project Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
椰椰椰耶
2024/10/15
2860
【Maven】依赖管理,Maven仓库,Maven核心功能
相关推荐
2. 依赖管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档