You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.jarjandex-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的方法一次就搞定了😉

火山引擎 最新活动