Jetty部署服务时遇Java.lang.NoSuchFieldError:WIRE_BUS_NAME求助
解决Jetty部署时的NoSuchFieldError: WIRE_BUS_NAME问题
这个NoSuchFieldError: WIRE_BUS_NAME错误几乎可以肯定是CXF与Spring版本不兼容导致的,和Hibernate完全无关——你之前升级Hibernate解决问题只是巧合,大概率是升级过程中间接调整了依赖树里的CXF/Spring版本匹配度。
下面是具体的排查和解决步骤:
第一步:确认CXF与Spring的版本对应关系
不同版本的CXF对Spring核心依赖(spring-core、spring-context等)有严格的版本要求:- 比如CXF 3.x系列通常适配Spring 4.x或5.x,旧版CXF(如2.x)无法兼容Spring 5.x,反之高版本CXF也可能不支持过低的Spring版本。
你可以对照CXF官方的版本兼容矩阵,找到当前CXF版本对应的Spring版本范围,确保项目里的Spring依赖符合要求。
- 比如CXF 3.x系列通常适配Spring 4.x或5.x,旧版CXF(如2.x)无法兼容Spring 5.x,反之高版本CXF也可能不支持过低的Spring版本。
第二步:排查依赖冲突
用依赖分析工具找出潜在的版本冲突:- 如果是Maven项目,执行命令
mvn dependency:tree;Gradle项目则执行./gradlew dependencies。 - 在输出结果里搜索
spring-和cxf-开头的依赖,检查是否有不同版本的Spring或CXF被第三方依赖间接引入(比如某个组件偷偷带了旧版Spring)。
- 如果是Maven项目,执行命令
第三步:强制统一依赖版本
一旦发现冲突,通过依赖管理机制强制统一版本:- 以Maven为例,在
pom.xml的<dependencyManagement>节点中明确指定Spring核心依赖和CXF核心依赖的版本,确保所有模块都使用同一版本:<dependencyManagement> <dependencies> <!-- 统一Spring核心依赖版本 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.20</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.20</version> </dependency> <!-- 统一CXF核心依赖版本 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.5.0</version> </dependency> </dependencies> </dependencyManagement>
- 以Maven为例,在
第四步:验证部署包的依赖完整性
打包后检查Jetty的webapp/lib目录,确保没有同时存在不同版本的Spring或CXF jar包(比如既有spring-core-4.3.x.jar又有spring-core-5.3.x.jar),如果有,删除旧版本的冗余jar。
这个错误的本质是org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor类试图访问的WIRE_BUS_NAME字段在当前类路径的Spring/CXF版本中不存在,只要把两个框架的版本对齐,问题就能解决。
内容的提问来源于stack exchange,提问作者pythonaddict
相关产品推荐
相关产品推荐

