温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
打开pad clinic的胖点XML,第一眼看不到几个版本号。那汤姆森海ber内的版本究竟从哪里来?先看parent,再查dependency management和B。Spring boot把兼容版本集中在一处,项目只声明坐标,不声明版本。那starter又是什么?他只是打包常用依赖的入口,真正决定版本的是它背后引入的BOM,不是starter自己。执行dependency能看到实际解析结果,Effective POM则展示合并后的完整模型。两者配合才能定位版本来源。生产台账时,最怕影视升级。Po能确认最终生效的插件和依赖版本,避免只看源码poem产生误判。我故意在项目里覆盖一个底层依赖版本,比如Jackson,结果dependency tree多个传递依赖同时变了。
01:01
因为BOM管理的是整套组合,不是单个这儿。你覆盖一个点,就打破了spring boot验证过的版本矩阵。更危险的是,这种覆盖可能引入已知漏洞版本,而安全扫描仍按B基线判断,形成误报或漏报。那为什么spring boot不让我们每个这儿自己声明version各自声明不是更灵活吗?各自声明会导致版本漂移,A组件和B组件可能引用不兼容的底层库。统一管理是为了保证整体可启动、可测试。Ma rapper则固定构建工具版本,让本地CI生产使用同一套maven,避免构建环境差异影响依赖解析。所以只升级一个hibernate可能破坏spring boot整套兼容关系。最小落地做法是先查BOM,再决定是否升级。
我来说两句