War包部署失败求助:已执行项目清理与Maven依赖更新
部署Spring响应式应用到WildFly时NoClassDefFoundError问题排查
问题场景
部署demo-0.0.1-SNAPSHOT.war到WildFly时启动失败,已执行mvn clean和mvn dependency:update操作,问题未解决。报错核心信息如下:
{"WFLYCTL0080: Failed services" => { "jboss.deployment.unit.\"demo-0.0.1-SNAPSHOT.war\".component.\"org.springframework.http.server.reactive.ServletServerHttpResponse$ResponseAsyncListener\".WeldInstantiator" => "Failed to start service Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class org.springframework.http.server.reactive.ServletServerHttpResponse$ResponseAsyncListener Caused by: java.lang.NoClassDefFoundError: Failed to link org/springframework/http/server/reactive/ServletServerHttpResponse$ResponseBodyProcessor (Module \"deployment.demo-0.0.1-SNAPSHOT.war\" from Service Module Loader): Failed to link org/springframework/http/server/reactive/AbstractListenerWriteProcessor (Module \"deployment.demo-0.0.1-SNAPSHOT.war\" from Service Module Loader): org/reactivestreams/Processor", "jboss.deployment.unit.\"demo-0.0.1-SNAPSHOT.war\".component.\"org.springframework.http.server.reactive.ServletServerHttpRequest$RequestAsyncListener\".WeldInstantiator" => "Failed to start service Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class org.springframework.http.server.reactive.ServletServerHttpRequest$RequestAsyncListener Caused by: java.lang.NoClassDefFoundError: Failed to link org/springframework/http/server/reactive/ServletServerHttpRequest$RequestBodyPublisher (Module \"deployment.demo-0.0.1-SNAPSHOT.war\" from Service Module Loader): Failed to link org/springframework/http/server/reactive/AbstractListenerReadPublisher (Module \"deployment.demo-0.0.1-SNAPSHOT.war\" from Service Module Loader): org/reactivestreams/Publisher", "jboss.deployment.unit.\"demo-0.0.1-SNAPSHOT.war\".component.\"org.springframework.http.server.reactive.ServletHttpHandlerAdapter$HttpHandlerAsyncListener\".WeldInstantiator" => "Failed to start service Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class org.springframework.http.server.reactive.ServletHttpHandlerAdapter$HttpHandlerAsyncListener Caused by: java.lang.NoClassDefFoundError: Failed to link org/springframework/http/server/reactive/ServletHttpHandlerAdapter$HandlerResultSubscriber (Module \"deployment.demo-0.0.1-SNAPSHOT.war\" from Service Module Loader): org/reactivestreams/Subscriber" }}
问题原因
报错显示无法找到org.reactivestreams包下的Processor、Publisher、Subscriber类,说明应用依赖的Reactive Streams API未被正确加载:
- 要么WAR包中未包含该依赖
- 要么WildFly容器提供的版本与应用不兼容,或未正确声明模块依赖
解决方案
1. 确保Maven依赖中包含Reactive Streams API
如果是Spring Boot WebFlux项目,spring-boot-starter-webflux会自动引入该依赖;若是普通Spring项目,需手动添加:
<dependency> <groupId>org.reactivestreams</groupId> <artifactId>reactive-streams</artifactId> <version>1.0.4</version> <!-- 选择与Spring版本兼容的稳定版本 --> <scope>compile</scope> </dependency>
同时检查pom.xml中是否存在排除该依赖的<exclusions>配置,若有则移除。
2. 验证WAR包中包含该依赖
执行mvn package后,解压生成的WAR包,查看WEB-INF/lib目录下是否存在reactive-streams-*.jar。若缺失,检查Maven依赖传递是否被阻断。
3. 配置WildFly模块依赖(可选)
若希望使用WildFly内置的Reactive Streams模块,需在项目根目录创建src/main/webapp/WEB-INF/jboss-deployment-structure.xml,添加如下配置:
<jboss-deployment-structure> <deployment> <dependencies> <module name="org.reactivestreams" /> </dependencies> </deployment> </jboss-deployment-structure>
注意:优先选择让应用自带依赖(方案1),避免容器版本与应用依赖冲突。
4. 检查Spring版本兼容性
确保Spring版本与Reactive Streams版本匹配:
- Spring 5.x 对应 Reactive Streams 1.0.x
- Spring 6.x 兼容 Reactive Streams 1.0.x 及以上稳定版本
内容的提问来源于stack exchange,提问作者mansimrat bedi
相关产品推荐
相关产品推荐

