现象
建立一个maven项目, 将spring-context包给引入进来。
org.springframework
spring-context
5.0.8.RELEASE
在这个时候, 去看左边的lib, 进而我们察觉到引入了一个坐标, 并且多出了好多的jar包, 这种现象被称作依赖传递, 也就是说, 当前这个坐标所依赖的jar包也会一起引入过来, 这里面所有的版本都是5.0.8的。
随后, 我们再度引入一个springmvc这件事。我们对其进行版本更换, 我们引入的是4.2.4版本。
org.springframework
spring-webmvc
4.2.4.RELEASE
我们借助idea所给出的maven分析图能够看得出来, mvc是依赖于sprng-core的, 其依赖的版本是5.0.8, versioncontext同样是依赖于sprng-core的, 而这个版本却是4.2.4。
那么真正加载的是哪个版本呢。是5.0.8版本。
在这个时候, 出现了jar包的冲突状况, 于是针对解决这个状况, 会有三种途径。
声明优先原则
此刻, 在我们的pom文件里头, 先是声明的5.0.8版本, 后续声明的是4.2.4版本, 我们把它们的顺序给调换一下。

这个时候, 我们找寻到他们共同所依赖的那个jar包, 全部都已然变成了4.2.4版本, 而这便是声明优先原则了。
就近优先原则
比方说, 我们不愿意去进行顺序的调换, 我们仅仅是打算用那个4.2.4版本的spring-core, 我们能够将其径自引入进来。
此时候再去看, 我们察觉到所依赖的spring-core已然变成了4.2.4版本了。
这便是就近优先原则, 就近优先乃直接依赖, 直接依赖的优先级高于传递依赖的优先级。
排除依赖
这种方式, 我们能够直接排除, spring - context里的spring - core的传递依赖。
再看依赖,此时已经改为4.2.4.
运用exclusions标签之际, 其内部无需书写版本号, 这是仅有的一种无需书写版本号的情形。由于它会默认去寻当前依赖的版本。