Wildfly 35.0.1部署Jasper Reports 9.0.0启动失败,报Jandex索引ArrayIndexOutOfBoundsException警告
Wildfly 35.0.1部署Jasper Reports 9.0.0启动失败,报Jandex索引ArrayIndexOutOfBoundsException警告
遇到这种启动卡壳的Jandex索引报错确实挺闹心的,我来帮你拆解下问题根源和可行的解决办法:
问题分析
从你贴的日志能明确看到,Wildfly自带的Jandex索引器(版本2.1.2.Final)在处理Guava 32.1.2-jre.jar里的类时,抛出了ArrayIndexOutOfBoundsException。这是因为高版本Guava(32+)用了更新的Java字节码特性,而旧版本的Jandex(比如你用的2.1.2)对这些新特性的支持不完善,导致索引失败,进而卡住服务器启动流程。
解决办法(按推荐优先级排序)
1. 降级Guava版本(最稳妥的方案)
把Jasper Server里的高版本Guava替换成和Jandex 2.1.2兼容的版本,比如Guava 31.1-jre:
- 定位到你的
repo.war/WEB-INF/lib/目录,找到guava-32.1.2-jre.jar并删除 - 下载
guava-31.1-jre.jar放到同一个lib目录下 - 清理Wildfly的临时缓存(删除
standalone/tmp/下的所有文件),然后重启服务器
2. 升级Wildfly的Jandex模块
如果不想降级Guava,可以手动更新Wildfly中的Jandex到支持高版本Guava的版本(比如Jandex 3.1.1.Final):
- 找到Wildfly安装目录下的
modules/system/layers/base/org/jboss/jandex/main/文件夹 - 替换该目录下的
jandex-2.1.2.Final.jar为jandex-3.1.1.Final.jar - 编辑同目录下的
module.xml,把<resource-root path="jandex-2.1.2.Final.jar"/>修改为对应的新版本文件名 - 清理Wildfly的缓存(
standalone/tmp/和standalone/data/content/),再重启服务器
3. 临时跳过Jandex索引(仅应急用)
如果只是想先让服务器启动起来,可以临时关闭注解索引,但不推荐长期使用,可能影响Jasper Server的部分功能:
- 打开Wildfly的
standalone.xml配置文件,找到部署扫描器的配置段,添加annotation-index="false":<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0"> <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" annotation-index="false"/> </subsystem> - 或者在启动Wildfly时添加JVM参数:
-Djboss.as.deployment.annotation.index.skip=true
验证操作
完成上述任意一种方案后,启动Wildfly,观察日志是否还有ArrayIndexOutOfBoundsException的警告。如果警告消失,再访问Jasper Server的控制台,确认服务能正常使用。
我之前帮同事处理过几乎一模一样的报错,用降级Guava的方法一次就搞定了😉




