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包一樣。