依赖版本治理比升级本身更重要

zjc 于 2026-08-20 发布

微服务依赖链很长,某个传递依赖出安全问题时,如果每个模块各管各的版本,修复会非常慢。项目把关键版本集中在父 POM,并用 BOM 管理框架族。

一、三层版本管理

Spring Boot Parent
Spring Cloud BOM
Spring Cloud Alibaba BOM

业务模块基本不写版本号,避免和框架兼容矩阵脱节。

二、关键依赖显式覆盖

父 POM 集中维护:

Jackson 2 / Jackson 3
Netty
HttpCore5 / HttpClient5
Log4j2 API
Bouncy Castle

这些库常见且传递面广,出问题时必须能一处升级、全工程生效。

三、版本不是越新越好

升级要区分安全修复和功能版本。安全修复优先,功能升级要看兼容性测试。特别是 Jackson、Netty 这类底层库,序列化格式和网络行为都可能影响链路。

四、自动 PR 只是入口

Dependabot 能提示版本,但合并前仍要确认:

  1. 是否包含安全修复。
  2. 是否兼容 Java 21 和当前 Boot 版本。
  3. 测试是否完整通过。
  4. 是否需要同步覆盖多个相关依赖。

五、经验总结

版本治理的目标是可控升级。集中声明、少量覆盖、定期更新,比临时到处改版本稳得多。