结论:exclusion 表示对传递性依赖进行排除,排除后当前项目的依赖jar中,就不会包含该传递性依赖。

扩展:项目中的jar 都会在classpath下,排除后的传递性依赖,相当于在classpath下清除掉了。所以排除后,可能会引出一些问题。

问题1:本项目显式使用的依赖被排除了,编译报错。这种可以及时修改。

问题2:本项目未显式使用的依赖被排除了,编译正常。启动服务报错(因为启动服务时使用到了被排除的依赖)。

如:排除前的依赖

 排除后的依赖

模拟服务启动报错:启动类创建一个类型为PredefinedScopeHibernateValidator的对象。

错误分析:下图中标记1对应的依赖存在,而标记3对应的依赖已经被排除了,即classpath中不会存在ValidationProvider.class。而启动服务时,要求加载ValidationProvider类,所以启动服务报找不到类。

问题3:本项目未显式使用的依赖被排除了,服务启动正常。某个方法在运行时,会调用被排除掉的依赖,就会出现找不到的报错。

如下方法,被调用时,触发PredefinedScopeHibernateValidator进一步,依赖ValidationProvider,最终导致找不到报错。

问题3和问题2本质是一样的,只是问题3在开发时候,不容易发现

老鸟建议:

1、升级依赖版本时,尽量不要排除,除非发现问题,如依赖冲突,或者非常明确这个排除的含义。

2、像springboot、spring 等这种框架级依赖,一般要升级其传递性依赖时,建议直接升级框架主依赖版本,主版本一般会包含新版本的传递性依赖。

不建议,直接排除框架级依赖的传递性依赖,再显式升级该传递性依赖。或者直接显式的升级,maven 依据最短路径原则,会解析显式升级的依赖。

最新文章

  1. [Android]Android端ORM框架——RapidORM(v1.0)
  2. ubuntu上用eclipse搭建java、python开发环境
  3. sql 中 left join 的使用
  4. HTML 学习笔记(块 和 类)
  5. IGV软件
  6. CSS 笔记五(Combinators/Pseudo-classes/Pseudo-elements)
  7. Spring整合Hibernate图文步骤
  8. bzoj 3809 Gty的二逼妹子序列(莫队算法,块状链表)
  9. [POJ2234]Matches Game
  10. jquery mouseout和mouseleave区别
  11. logstash grok 解析Nginx
  12. iOS不可变数组的所有操作
  13. Scrum Meeting Alpha - 4
  14. Bootstrap3 排版-内联文本元素
  15. 纸上谈兵: AVL树[转]
  16. IE浏览器Web自动化
  17. 牛客竞赛&&mjt的毒瘤赛
  18. pycharm搭建开发配置,远程调试,数据库配置,git配置等
  19. spring boot 实现文件下载
  20. c# dataGridView 表头格式设置不管用

热门文章

  1. 从Windows切换到Linux?看这篇就够了!
  2. 干货 | 亿级Web系统负载均衡几种实现方式
  3. 【Pandas vs SQL】数据分析代码逐行比对,孰优孰劣?
  4. node技术是啥?
  5. c++ :STL
  6. mysql外键,锁
  7. HTML区块
  8. .NET 6 从0到1使用Docker部署至Linux环境
  9. 软件构造Lab2实验总结
  10. 《HALCON数字图像处理》第四章笔记