1. 传递依赖:A依赖于B,而B依赖于C,那么C就可以称为A的传递依赖。
* 例如:项目依赖于struts的jar包,而struts又依赖xwork的jar包,并且xwork这些jar包也出现在了项目中,这种现象称为传递依赖。
2. 传递依赖冲突
* 使用maven创建web项目,引入struts-spring-plugin的插件坐标,再引入spring-context的坐标,会发现这个jar包都依赖了spring-beans的jar包
* spring-beans的版本不同,这个时候就产生了传递依赖冲突。
3. 解决传递依赖冲突
* 第一种方式:maven自己调节原则
* 第一声明者优先原则:谁先传递依赖进来的使用谁的传递依赖。
* 效果如下
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
* 路径近者优先原则:如果自己导入了依赖,那么就使用自己的依赖,不会使用传递依赖。
* 效果如下
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
* 第二种方式:排除依赖
* 打开pom.xml --> 选择dependency hierarchy --> 在要排除依赖的jar包上右键 --> 选择excude maven artifact --> 点击OK
* 效果如下
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24.1</version>
<exclusions>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
* 第三种方式:版本锁定(推荐使用的方式)
* 在pom的配置文件配置版本锁定,效果如下
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
* 在版本锁定的基础上,可以定义常量,锁定版本,下面都可以引用该常量。
<!-- 定义版本常量 -->
<properties>
<!-- 标签自定义的 -->
<spring-version>4.2.4.RELEASE</spring-version>
</properties>
<!-- 版本锁定 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
* 注意:版本锁定只是锁定了版本,没有导入依赖。导入依赖必须要使用<dependency>标签来导入。
maven依赖传递和冲突解决
最新推荐文章于 2024-08-18 20:26:14 发布