依赖冲突:
是指项目依赖的某一个jar包,有多个不同的版本,而每个版本中同一个类或方法的实现方式不同,因而造成类包版本冲突
表现形式:
通常的表现形式为抛出异常如下异常
1.java.lang.NoSuchMethodError
2.java.lang.ClassNotFoundException
3.java.lang.NoClassDefFoundError
所以当出现上述异常但是项目编译却能通过的时候我们就要考虑是不是出现了依赖冲突
我们在开发过程中如果使用intellij idea,可以安装插件 maven helper来查看冲突的包内容,方便解决。
安装完之后会多一个Dependency Analyzer视图,点击该视图:
上面按钮的图标含义如下
- Conflicts(查看冲突)
- All Dependencies as List(列表形式查看所有依赖)
- All Dependencies as Tree(树形式查看所有依赖)
第①种方法:
排除冲突依赖的方法,可以直接使用maven helper工具,选择All Dependencies as Tree,选择红色冲突的包右键点击Exlude就可以。
第②种方法
在冲突的包中使用exclusions踢出不需要的版本;
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
第③种方法
在pom文件中重新制定我们需要的pom依赖的版本号也可以达到效果
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>