1、依赖冲突:
当服务启动或者调用发生如下异常时,NoSuchMethodError,ClassNotFoundException 等。则一般是因为jar包冲突引起的。
大多数依赖冲突,maven的传递依赖会引入很多隐式的依赖,依赖的版本和实际使用的版本不一致导致的。
2、依赖的原则:
原则一:最短路径优先 最短路径优先: 当依赖声明不在同一个POM文件中时,或者说存在依赖传递时,路径最短的jar包将被选为最终依赖。 原则二:第一声明者优先 第一声明者优先: 当依赖声明不在同一个POM文件中时,或者说存在依赖传递时,并且依赖传递长度相同时,最先声明的依赖将被选为最终依赖。 原则三:覆盖优先 覆盖优先: 当依赖声明在同一个POM文件中时,后面声明的依赖将覆盖前面声明的依赖。
(1)路径最短优先原则
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.2.RELEASE</version> </dependency> 这里可以看出5.0.2取代了4.2.4,这就是我们所说的路劲最短者优先,因为context的依赖虽然会自动导入core包,但是那就是属于下级依赖了,
而5.0.2这个依赖和context这个依赖为同级,所以最终会取这个版本。
(2)路径相同时先声明者优先
先统一版本号,然后把两个依赖顺序颠倒一下,会发现core包相关包都会是5.0.2版本
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
3、依赖冲突解决
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
标签:5.0,core,依赖,spring,springframework,Maven,冲突,org From: https://www.cnblogs.com/wongzzh/p/17934903.html