Maven 之 依赖管理

2023-10-17 14:40:01 浏览数 (2)

我们开发一个工程需要用到大量得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、可选依赖和排除依赖的区别

若有收获,就点个赞吧

0 人点赞