为什么要导入依赖,因为没有那个依赖你就用不了对应的方法 【依赖配置】 依赖指当前项目运行所需的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(你实际)