maven依赖传递和冲突解决
2017-12-02 15:21
344 查看
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>标签来导入。
* 例如:项目依赖于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学习笔记---传递依赖冲突解决
- maven 传递依赖-冲突解决
- 解决maven传递依赖中的版本冲突
- Maven传递依赖冲突解决(版本冲突)
- 解决maven传递依赖中的版本冲突
- 解决maven传递依赖中的版本冲突
- [置顶] Maven传递依赖冲突解决的三大种方式
- Maven 传递依赖冲突解决(了解)
- Maven传递依赖冲突解决
- 解决maven传递依赖中的版本冲突
- 解决maven传递依赖中的版本冲突
- 解决maven【传递依赖】中的版本冲突
- 解决maven依赖传递中的版本冲突问题
- Maven解决类包依赖冲突
- maven解决依赖冲突
- 解决maven中servlet-api.jar和容器自带的servlet-api.jar的依赖冲突
- 正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
- Maven依赖jar包冲突常见的解决方法
- Maven解决类包依赖冲突
- 查lib下的jar来自哪个maven依赖(通过用于解决jar版本冲突)