在使用Maven中我们导入jar包坐标时会产生依赖传递,而依赖传递难免会发生jar包间的依赖冲突,解决jar包冲突有以下解决方案:
1)、在平时导入jar包时即使产生了依赖冲突程序也会照样运行,这是因为maven会遵循两个原则,来解决jar包冲突:
a)、第一声明者优先原则;即在pom文件中jar包坐标的导入顺序决定了发生依赖冲突时使用哪个发生冲突的jar包,先声明者优先;
b)、路径近者优先原则;即直接依赖优先于间接依赖,依赖的层级越低越优先;
2)、排除依赖;
原因分析:由于依赖冲突是相同jar包所产生的,我们可以通过将指定的依赖进行排除,只保留冲突的一方;
实现:通过指定的标签实现排除指定的依赖(排除了spring-beans的依赖)
3)、锁定版本;
我们可以通过指定标签锁定指定jar包的版本,保证我们的程序在运行时采用我们锁定jar包的版本(例:当别人在使用我们程序所打成的jar包时,通过版本锁定即使使用者在他们的程序中导入了其他版本的相同jar包,也会保证我们程序中的jar包版本不会发生改变,保证了程序的正常运行);
需要注意的是:
1)、锁定标签并不会导入依赖,如果需要导入以来还需要通过<dependency>标签来完成,通过<dependency>导入依赖时可以不声明jar包的版本,会自动导入锁定的版本jar包;
2)、锁定版本的标签一般只写在父模块中,子模块可以通过继承也会受影响;
3)、如果子模块中没有声明版本,并且父模块中也没有书写锁定版本的标签,则程序会报错;