WildFly30部署SpringBoot3.2.0 War包遇FieldInternal.type()空指针异常
问题:Spring Boot 3.2.0 WAR部署至WildFly 30时触发Jandex空指针异常
环境信息
- WildFly 30
- Java 21
- Spring Boot 3.2.0
问题现象
生成WAR包后部署到WildFly 30时,部署流程失败,抛出空指针异常,核心报错为:无法调用org.jboss.jandex.FieldInternal.type(),因为field为null。
错误日志
15:14:42,252 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 1) WFLYCTL0013: 操作“deploy”执行失败 - 地址: ([("deployment" => "duengeportal-rest-api.war")]) - 失败描述: {"WFLYCTL0080: 服务启动失败" => {"jboss.deployment.unit.\"duengeportal-rest-api.war\".STRUCTURE" => "WFLYSRV0153: 处理部署\"duengeportal-rest-api.war\"的STRUCTURE阶段失败 原因: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYSRV0156: 无法为注解索引部署根目录 原因: java.lang.NullPointerException: 无法调用\"org.jboss.jandex.FieldInternal.type()\",因为\"field\"为null"}} 15:14:42,252 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 1) WFLYCTL0013: 操作“deploy”执行失败 - 地址: ([("deployment" => "duengeportal-rest-api.war")]) - 失败描述: {"WFLYCTL0080: 服务启动失败" => {"jboss.deployment.unit.\"duengeportal-rest-api.war\".STRUCTURE" => "WFLYSRV0153: 处理部署\"duengeportal-rest-api.war\"的STRUCTURE阶段失败 原因: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYSRV0156: 无法为注解索引部署根目录 原因: java.lang.NullPointerException: 无法调用\"org.jboss.jandex.FieldInternal.type()\",因为\"field\"为null"}} 15:14:42,254 ERROR [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0021: 部署\"duengeportal-rest-api.war\"已回滚,失败信息如下: {"WFLYCTL0080: 服务启动失败" => {"jboss.deployment.unit.\"duengeportal-rest-api.war\".STRUCTURE" => "WFLYSRV0153: 处理部署\"duengeportal-rest-api.war\"的STRUCTURE阶段失败 原因: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYSRV0156: 无法为注解索引部署根目录 原因: java.lang.NullPointerException: 无法调用\"org.jboss.jandex.FieldInternal.type()\",因为\"field\"为null"}} 15:14:42,258 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0028: 已停止部署duengeportal-rest-api.war(运行时名称: duengeportal-rest-api.war),耗时4ms [2023-12-12 03:14:42,295] Artifact duengeportal-rest-api.war: 构件部署出错,详情请查看服务器日志。 [2023-12-12 03:14:42,296] Artifact duengeportal-rest-api.war: java.lang.Exception: {"WFLYCTL0080: 服务启动失败" => {"jboss.deployment.unit.\"duengeportal-rest-api.war\".STRUCTURE" => "WFLYSRV0153: 处理部署\"duengeportal-rest-api.war\"的STRUCTURE阶段失败 原因: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYSRV0156: 无法为注解索引部署根目录 原因: java.lang.NullPointerException: 无法调用\"org.jboss.jandex.FieldInternal.type()\",因为\"field\"为null"}}
解决方案
方案1:排除Spring Boot的Jandex依赖
Spring Boot 3.2.0自带的Jandex版本与WildFly 30内置版本存在兼容性冲突,在pom.xml中排除Spring Boot依赖树中的Jandex:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.jboss</groupId> <artifactId>jandex</artifactId> </exclusion> </exclusions> </dependency>
若项目中存在其他starter依赖,需同步检查并排除其中的Jandex依赖。
方案2:升级WildFly版本至30.0.1.Final或更高
WildFly 30初始版本存在Jandex处理的bug,后续补丁版本已修复该问题,下载并升级到WildFly 30.0.1.Final或最新稳定版本后重新部署WAR包。
方案3:禁用WildFly的注解索引自动处理
在WAR包的WEB-INF/jboss-deployment-structure.xml中添加配置,跳过注解索引处理:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <properties> <property name="jboss.as.server.deployment.annotation.index.skip" value="true"/> </properties> </deployment> </jboss-deployment-structure>
内容的提问来源于stack exchange,提问作者Lorenzo Cozza
相关产品推荐
相关产品推荐

