maven导入jar包中的一些概念: 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。
解决jar包冲突的方式:
方式一: 第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。 先声明的jar包坐标下的依赖包,可以优先进入项目中。
也就是pom文件里,谁写在上面一些谁进入项目依赖中
方式二: 路径近者优先原则。直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包。
比如spring-bens和spring-context中spring-core冲突了,那么我直接导入spring-core
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>
<version>5.1.0</version>
</dependency>
那么将会使用我直接依赖的版本,而不用他们传递依赖的版本了,路径近优先。
方式三【推荐使用】: 直接排除法。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions>
</dependency> 当我们要排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号。 因为此时依赖包使用的版本和默认和本jar包一样。