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

Maven 之 依赖管理

作者头像
一切总会归于平淡
发布2023-10-17 14:40:01
1300
发布2023-10-17 14:40:01
举报

我们开发一个工程需要用到大量得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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、依赖传递
    • 小案例:
    • 2、可选依赖
    • 3、 排除依赖
    • 4、可选依赖和排除依赖的区别
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档