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、 排除依赖
排除依赖跟可选依赖优点相似,可选依赖是自己隐藏,不对外公布。
排除依赖就是,我导入了你的依赖,而你的依赖中有写依赖是我不想要的,这个时候我就可以使用排除依赖进行排除。
我往下看看这个排除依赖如何使用。
案例 :