You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.4.2 Webflux项目中Netty版本不一致问题排查及强制指定版本求助

Spring Boot 3.4.2 Webflux项目中Netty版本不一致问题排查及强制指定版本求助

最近我碰到了一个特别棘手的Maven依赖版本问题,两个基于Spring Boot 3.4.2 + Webflux的项目,居然出现了Netty核心依赖版本不一致的情况,折腾了好几天都没完全搞定,想请大家支支招。

问题背景

两个项目都引入了完全相同的Spring Boot父依赖和Webflux Starter:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.2</version>
        <relativePath/>
</parent>
...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

通过Maven依赖树分析,两个项目的org.springframework.boot:spring-boot-starter-reactor-netty:3.4.2都依赖io.projectreactor.netty:reactor-netty-http:1.2.2,但Netty的核心编码包版本却不一样:

  • 项目1拉取的是io.netty:netty-codec-http:4.1.115.Final
  • 项目2(包括我用Spring Initializr新建的同配置空白项目)都能正确拉取io.netty:netty-codec-http:4.1.117.Final

已尝试的排查手段

我几乎把能想到的排查方法都试了一遍,但问题还是没解决:

  • 用Spring Initializr新建了带Spring Cloud + Webflux的空白项目,确认能正常获取4.1.117.Final版本,排除了Spring Boot本身的问题
  • 用IntelliJ IDEA 2024.3.2.1社区版执行了Invalidate Caches / Restart,清理了本地缓存,没用
  • 启用Maven Enforcer插件检查依赖冲突,但插件完全没检测到版本冲突
  • 三个项目用的是完全相同的settings.xml,而且各自配置了独立的Maven仓库目录,依赖源都是公司内部的JFrog仓库
  • 直接删除了所有项目的本地仓库,重新拉取所有依赖,结果项目1还是拿到115.Final版本

依赖树片段对比

项目1的依赖树片段

[INFO] +- org.springframework.boot:spring-boot-starter-webflux:jar:3.4.2:compile
[INFO] |  +- (org.springframework.boot:spring-boot-starter:jar:3.4.2:compile - version managed from 3.4.2; omitted for duplicate)
[INFO] |  +- (org.springframework.boot:spring-boot-starter-json:jar:3.4.2:compile - version managed from 3.4.2; omitted for duplicate)
[INFO] |  +- org.springframework.boot:spring-boot-starter-reactor-netty:jar:3.4.2:compile (version managed from 3.4.2)
[INFO] |  |  \- io.projectreactor.netty:reactor-netty-http:jar:1.2.2:compile (version managed from 1.2.2)
[INFO] |  |     +- io.netty:netty-codec-http:jar:4.1.115.Final:compile (version managed from 4.1.116.Final)
[INFO] |  |     |  +- io.netty:netty-common:jar:4.1.115.Final:compile (version managed from 4.1.115.Final)
[INFO] |  |     |  +- io.netty:netty-buffer:jar:4.1.115.Final:compile (version managed from 4.1.115.Final)
[INFO] |  |     |  |  \- (io.netty:netty-common:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)
[INFO] |  |     |  +- io.netty:netty-transport:jar:4.1.115.Final:compile (version managed from 4.1.115.Final)
[INFO] |  |     |  |  +- (io.netty:netty-common:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)
[INFO] |  |     |  |  +- (io.netty:netty-buffer:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)
[INFO] |  |     |  |  \- (io.netty:netty-resolver:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)
[INFO] |  |     |  +- io.netty:netty-codec:jar:4.1.115.Final:compile (version managed from 4.1.115.Final)
[INFO] |  |     |  |  +- (io.netty:netty-common:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)
[INFO] |  |     |  |  +- (io.netty:netty-buffer:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)
[INFO] |  |     |  |  \- (io.netty:netty-transport:jar:4.1.115.Final:compile - version managed from 4.1.115.Final; omitted for duplicate)

项目2的依赖树片段

[INFO] +- org.springframework.boot:spring-boot-starter-webflux:jar:3.4.2:compile
[INFO] |  +- (org.springframework.boot:spring-boot-starter:jar:3.4.2:compile - version managed from 3.4.2; omitted for duplicate)
[INFO] |  +- (org.springframework.boot:spring-boot-starter-json:jar:3.4.2:compile - version managed from 3.4.2; omitted for duplicate)
[INFO] |  +- org.springframework.boot:spring-boot-starter-reactor-netty:jar:3.4.2:compile (version managed from 3.4.2)
[INFO] |  |  \- io.projectreactor.netty:reactor-netty-http:jar:1.2.2:compile (version managed from 1.2.2)
[INFO] |  |     +- io.netty:netty-codec-http:jar:4.1.117.Final:compile (version managed from 4.1.116.Final)
[INFO] |  |     |  +- io.netty:netty-common:jar:4.1.117.Final:compile (version managed from 4.1.117.Final)
[INFO] |  |     |  +- io.netty:netty-buffer:jar:4.1.117.Final:compile (version managed from 4.1.117.Final)
[INFO] |  |     |  |  \- (io.netty:netty-common:jar:4.1.117.Final:compile - version managed from 4.1.117.Final; omitted for duplicate)
[INFO] |  |     |  +- io.netty:netty-transport:jar:4.1.117.Final:compile (version managed from 4.1.117.Final)
[INFO] |  |     |  |  +- (io.netty:netty-common:jar:4.1.117.Final:compile - version managed from 4.1.117.Final; omitted for duplicate)
[INFO] |  |     |  |  +- (io.netty:netty-buffer:jar:4.1.117.Final:compile - version managed from 4.1.117.Final; omitted for duplicate)
[INFO] |  |     |  |  \- (io.netty:netty-resolver:jar:4.1.117.Final:compile - version managed from 4.1.117.Final; omitted for duplicate)
[INFO] |  |     |  +- io.netty:netty-codec:jar:4.1.117.Final:compile (version managed from 4.1.117.Final)

部分排查进展

折腾了好久,终于找到版本差异的源头了!项目1的dependencyManagement里引入了Apache Camel的Spring Boot依赖管理Pom:

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot-dependencies</artifactId>
    <version>4.9.0</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

这个Pom的版本管理优先级比Spring Boot父Pom高,覆盖了Netty的版本。我尝试过在这个引入里排除所有Netty相关包,但完全没用;现在试着把它从dependencyManagement移到普通dependencies区块,还在测试效果。奇怪的是,这个Pom依赖在Maven依赖树里完全看不到,可能因为它是Pom类型而不是Jar的缘故?

求助问题

现在我想彻底解决这个问题,想请教大家:

  1. 有没有办法绕过Maven默认的依赖版本仲裁逻辑,强制让项目1使用Spring Boot父Pom中管理的4.1.117.Final版本的Netty?
  2. 有没有更彻底的方法,能追踪到这个版本覆盖的具体路径(毕竟这个Camel的Pom在依赖树里看不到)?

备注:内容来源于stack exchange,提问作者jase52476

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:48:00