pom.xml文件中的依赖声明
所有的依赖写在<dependnecies>
框架中,每当声名一个新的依赖时,需要新建一个<dependnecy>
,中间至少包含三个内容——groupId
artifactId
version
,可以直接在官网中查找。
<dependencies>
<!--具体的依赖-->
<dependency>
<!--依赖所属群组id-->
<groupId>junit</groupId>
<!--依赖所属项目id-->
<artifactId>junit</artifactId>
<!--依赖版本号-->
<version>4.12</version>
</dependency>
<dependencies>
依赖管理
依赖传递
- 直接依赖:
在当前项目中通过依赖配置建立的依赖关系(直接在
pom.xml
中配置的依赖) - 间接依赖: 当被依赖的资源如果依赖其他资源,则当前项目间接依赖其他的资源。例如项目A依赖资源B,资源B又依赖资源C,则A间接依赖C……以此类推,类似于继承。
冲突问题的解决
如果一个项目直接和间接依赖的资源中有相同的(版本号不要求相同),则会产生冲突。冲突的解决依赖于以下三个原则——
- 路径优先:当依赖中出现相同的资源时,层级越深则优先级越低,层级越浅则优先级越高——即遵循就近原则。
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
可选依赖是指对外隐藏当前所依赖的资源。例如,项目A依赖了资源B,资源B依赖了资源C,但是B对C的依赖时被隐藏的,那么项目A不会间接依赖资源C。
可选依赖的设置方法如下——
<dependencies>
<!--具体的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--可选依赖选项 -->
<optional>true</optional>
</dependency>
<dependencies>
排除依赖
排除依赖是指 主动断开依赖的资源,被排除的资源无需指定版本。例如,项目A依赖了资源B,资源B依赖了资源C,但是我们又不想让项目A间接依赖资源C,那么这时候就需要在项目A中将对资源C的依赖排除。
排除依赖的设置方法如下——
<dependencies>
<!--具体的依赖-->
<dependency>
<groupId>project_C</groupId>
<artifactId>project_C</artifactId>
<version>1.0</version>
<!--排除依赖选项 -->
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
<dependencies>
依赖范围
依赖的jar
在默认情况下可以在任何地方使用,也可以通过scope标签设定其作用范围。
依赖范围分类
- 主程序范围有效(main文件夹)
- 测试程序范围有效(test文件夹)
- 是否参与打包(package指令范围)
scope | 主代码 | 测试代码 | 打包 | 资源范例 |
---|---|---|---|---|
compile | Y | Y | Y | log4j |
test | N | Y | N | junit |
provided | Y | Y | N | servlet-api |
runtime | N | N | Y | jdbc |
依赖范围设置
需要使用scope
关键字设置依赖的范围——
<dependencies>
<!--具体的依赖-->
<dependency>
<groupId>project_C</groupId>
<artifactId>project_C</artifactId>
<version>1.0</version>
<!--依赖范围选项 -->
<scope>runtime</scope>
</dependency>
<dependencies>
依赖范围传递
带有依赖范围的资源进行传递时,作用范围会受到影响,并未严格传递。如下表所示(注:"行"为直接依赖,"列"为间接依赖)
compile | test | provided | runtime | |
---|---|---|---|---|
compile | compile | test | provided | runtime |
test | - | - | - | - |
provided | - | - | - | - |
runtime | runtime | test | provided | runtime |