maven工程要导入jar包的坐标,就必须要考虑解决jar包之间的冲突。
maven导入jar包中的一些概念:
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去的依赖包。
解决jar包冲突的方式:
方式一: 第一声明优先原则。
同一个名字的jar包,版本不一样,都是通过传递依赖进去的话,哪个直接依赖jar包的坐标在靠上的位置,那么这个jar包的版本就可以优先进入项目中。
方式二: 路径近者优先原则。
直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包。
方式三【推荐使用】:直接排除法。 //因为方式三可读性更高。
当我们要排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号, 因为此时依赖包使用的版本和默认和本jar包一样。
解决jar包冲突的方式三例子:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId
<version>4.2.4.RELEASE</version
<exclusions>
<exclusion> // 不要的那个jar包
<groupId>org. springframerork</groupId>
<artifactId>spring-core</artifactId
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org. springframework</group Id>
<artifactId>spring-context</artifactId)
<version>5.0.2. RELEASE</version
</dependency>
</dependencies>
所以:这两个直接依赖spring-beans和spring-context都有的传递依赖spring-core导入的版本是 5.0.2。
项目如果还要导入其他jar包的话要注意它们之间的冲突,要高版本的就行,因为会向下兼容。
图示是看jar包之间的依赖,就是哪个jar包要有哪个jar包才能使用。