一、依赖配置
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。
格式: <dependencies>标签中,可以添加多个依赖 (配置完成之后,记得刷新一下,就不用像以前那样copyjar包了)
<!-- 设置工程的所有依赖-->
<dependencies>
<!-- 具体的依赖-->
<dependency>
<!-- 依赖所属群组id -->
<groupId>junit</groupId>
<!-- 依赖所属的项目id -->
<artifactId>junit</artifactId>
<!-- 依赖版本号 -->
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
怎么将项目1作为一个资源配置到项目2中?
依然采取上述的格式
复制项目1中的内容:
<groupId>org.example</groupId>
<artifactId>java01</artifactId>
<version>1.0-SNAPSHOT</version>
粘贴到项目2中:
<!-- 设置工程的所有依赖-->
<dependencies>
<!-- 具体的依赖-->
<dependency>
<!-- 这三个标签,和上面同-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>java01</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
此时便完成了我们所需要的操作
二、依赖传递
比如上面的项目1和项目2,项目1作为资源加入到项目2中,如果我们此时为项目1配置一个新的jar包,而不给项目2手动配置,项目2也会有这个jar包资源的,这就是依赖传递。
直接依赖:在当前项目中,通过依赖配置建立的依赖关系
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
在此说明一下,直接依赖和间接依赖是相对来说的。
三、依赖传递的冲突问题
路径优先:当依赖中出现相同的资源的时候,层级越深,优先级越低(1度覆盖2度....)
声明优先:当资源在相同层级被依赖的时候,配置顺序靠前的覆盖配置顺序靠后的
(比如都是在2度的资源,这时候无法看路径优先,这是我们就看这两个都是2度的资源的上一级1度的资源是谁先配置的,。我们用先配置的1度资源下的2度资源)
特殊优先:当同级配置了相同资源不同版本,后配置的覆盖先配置的(类似java代码,从上往下执行)
四、可选依赖
可选依赖指对外隐藏当前所依赖的资源--不透明
还是用上面的项目1和项目2举例,项目1作为资源加入到项目2当中,此时在项目2中可以看到项目1中的依赖,现在我们要求,项目2中看不到项目1中的所选依赖,要怎么做?
很简单,只需要将项目1中的依赖再加上一个<optional>标签即可,写上 true,此时在项目2中就无法查看项目1中的依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<optional>true</optional>
</dependency>
</dependencies>
五、排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
如:在项目2中排除项目1中的资源
在项目2的pom.xml下的项目1的配置中,添加<exclusions>标签,在里面添加<groupId><artifactId>,不需要添加版本号
此时项目2就将项目1的此资源移除了
<!-- 设置工程的所有依赖-->
<dependencies>
<!-- 具体的依赖-->
<dependency>
<!-- 这三个标签,和上面同-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>java02</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
六、依赖的范围
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围 : ①主程序范围有效 (main文件夹范围内)
②测试程序范围有效(test文件夹范围内)
③是否参与打包(package指令范围内,就是打包的时候,这个jar包要不要打进去)
(Y表示此时可以使用)
七、依赖范围的传递性
带有依赖范围的资源在进行传递的时候,作用范围将收到影响
(把间接依赖理解为项目1,直接依赖理解为项目2,将项目2当做资源配置到项目1中)