为什么要导入依赖,因为没有那个依赖你就用不了对应的方法
【依赖配置】
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
格式:
junit
junit
4.12
我们可以把坐标当作依赖,也可以直接把同事的项目当作依赖,如果xxxx里面写的是项目名,那就相当于
把项目当作依赖给你自己的项目使用,优点:这个项目的所有已有依赖,你都可以使用(这就是间接依赖)
########################################################################################################
依赖具有传递性。依赖分为如下
1. 直接依赖: 在当前项目中通过依赖配置建立的依赖关系
2. 间接依赖: 被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
当你的依赖版本跟你拿的依赖版本不一致时,就会产生依赖传递冲突问题,此时系统会自动做如下选择
1. 路径优先: 当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
2. 声明优先: 当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的
3. 特殊优先: 当同级配置了相同资源(也就是配置了一次这个依赖,又重复配置了一次这个依赖)的不同版本,后配置的覆盖先配置的
直接依赖: 称为1度资源
直接依赖的直接依赖: 2度资源
直接依赖的直接依赖的直接依赖: 3度资源
......
如果出现了依赖冲突,那么1度(以这个为准)会覆盖2度,2度(以这个为准)会覆盖3度
########################################################################################################
【可选依赖】
可选依赖指的是对外隐藏当前所依赖的资源,简单理解就是别人拿你项目想用你依赖时,你隐藏起来不让别人用。
加一个标签就可以实现,如下
junit
junit
4.12
true
########################################################################################################
【排除依赖】
如果你拿别人项目的依赖,但是有一个依赖不想要,怎么办呢。需要加一个标签。比如我不想要org.hamcrest依赖,不需要写版本
junit
junit
4.12
org.hamcrest
hamcrest-core
########################################################################################################
【依赖范围】
依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定其作用范围。作用范围如下
1. 在主程序范围有效(main文件夹范围内)
2. 在测试程序范围有效(test文件夹范围内)
3. 在是否参与打包(package指令范围内)
scope 主代码 测试代码 打包 范例
compile(默认) yes yes yes log4j
test / yes / junit
provided yes yes / servlet-api
runtime / / yes jdbc
使用标签,会有5种选项值,如上,这五种选项值在不同目录里面的生效情况如上,
例如如何让mybatis依赖只在测试代码里(D:\maven_idea_project\web01\src\test)生效,具体代码如下
org.mybatis
mybatis
3.5.3
test<>
思考: 当别人项目的某个依赖使用了依赖范围(标签),那么你在你的项目依赖里面导入了别人的项目,也就间接把人家的依赖导入了,然后你二次再
配置了一次这个依赖的依赖范围,那你使用的是你指定的依赖范围,还是别人在项目里面指定的依赖范围呢,分情况而言,如下
compile(别人)+compile(你)=compile(你实际)
compile(别人)+test(你)=test(你实际)
compile(别人)+provided(你)=provided(你实际)
compile(别人)+runtime(你)=runtime(你实际)
test(别人)+compile(你)=你没有权限用
test(别人)+test(你)=你没有权限用
test(别人)+provided(你)=你没有权限用
test(别人)+runtime(你)=你没有权限用
provided(别人)+compile(你)=你没有权限用
provided(别人)+test(你)=你没有权限用
provided(别人)+provided(你)=你没有权限用
provided(别人)+runtime(你)=你没有权限用
runtime(别人)+compile(你)=runtime(你实际)
runtime(别人)+test(你)=test(你实际)
runtime(别人)+provided(你)=provided(你实际)
runtime(别人)+runtime(你)=runtime(你实际)