Spring Boot 3部署WildFly遇WFLYCTL0062错误,请求排查依赖
Spring Boot 3 部署至 WildFly-40.0.0.Final 失败:IncompatibleClassChangeError 问题排查
执行mvn clean install部署Spring Boot 3应用到WildFly-40.0.0.Final时,触发以下部署错误:
Failed to execute goal deploy: {"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-1" => {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"courese-api-app-0.0.1-SNAPSHOT.war\".component.\"jakarta.servlet.http.HttpServlet$NoBodyAsyncContextListener\".WeldInstantiator" => "Failed to start service [ERROR] Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class jakarta.servlet.http.HttpServlet$NoBodyAsyncContextListener [ERROR] Caused by: java.lang.IncompatibleClassChangeError: jakarta.servlet.http.HttpServlet and jakarta.servlet.http.HttpServlet$NoBodyAsyncContextListener disagree on InnerClasses attribute"}}}}
当前环境为WildFly-40.0.0.Final(注:原问题中版本号写为4.0.0.Final应为笔误),附上POM依赖及插件执行配置,请求确认依赖是否正确:
原POM依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.3.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> </dependencies>
原插件执行配置
<executions> <execution> <phase>install</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions>
问题原因与修复方案
核心问题
IncompatibleClassChangeError表明HttpServlet与其内部类NoBodyAsyncContextListener的InnerClasses属性不一致,本质是Servlet API版本冲突:Spring Boot Starter Web默认包含的Servlet API依赖与WildFly服务器提供的版本存在冲突,导致打包后的WAR包中混入了与服务器不兼容的Servlet类文件。
修复步骤
- 排除Spring Boot Starter Web中的Servlet API依赖
在spring-boot-starter-web的排除规则中添加Servlet API的排除,避免将其打包进WAR:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </exclusion> </exclusions> </dependency>
- 移除不必要的依赖
- 移除手动添加的
jakarta.servlet-api依赖:WildFly已内置符合版本要求的Servlet API,无需手动引入,Spring Boot的依赖管理会自动匹配兼容版本。 - 移除
cglib依赖:Spring Boot核心模块已集成CGLIB,手动引入可能引发版本冲突。
- 优化Lombok依赖
为Lombok添加<optional>true</optional>,避免其成为传递依赖影响其他模块:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
修复后的完整POM依赖示例
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>
补充说明
- 插件执行配置无需修改,保持当前绑定
install阶段执行deploy即可。 - 确认WildFly版本为40.0.0.Final(对应Jakarta EE 10),与Spring Boot 3.x版本完全兼容。
内容的提问来源于stack exchange,提问作者Thami Nkosi
相关产品推荐
相关产品推荐

