You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch 6.8.2升级rest-high-level-client后Jetty8部署报错求助

解决Elasticsearch Rest High Level Client升级后的Guice/Jetty部署错误

你遇到的这个ArrayIndexOutOfBoundsException本质是依赖版本冲突引发的Guice内部ASM类解析异常——旧版本的Guava(你提到的3.0大概率是笔误,这个版本过于古老,推测是30.0或其他相近版本)与Elasticsearch Rest High Level Client带来的依赖不兼容,再加上Jetty 8的类加载环境放大了这个问题。下面是具体的解决步骤:

1. 修复Guava版本冲突

Elasticsearch 6.8.2的Rest High Level Client依赖的是Guava 26.0-jre,你当前使用的Guava版本和这个版本差异极大,会引发大量兼容性问题。你需要统一项目中的Guava版本:

Maven配置示例:

<!-- 引入ES Rest High Level Client,排除自带的Guava -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.8.2</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 引入与ES兼容的Guava版本 -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>26.0-jre</version>
</dependency>

Gradle配置示例:

implementation('org.elasticsearch.client:elasticsearch-rest-high-level-client:6.8.2') {
    exclude group: 'com.google.guava', module: 'guava'
}
implementation 'com.google.guava:guava:26.0-jre'

2. 解决Guice的ASM依赖冲突

报错中的数组越界来自Guice内部的ASM类解析器,这通常是Jetty 8自带的旧版ASM与Guice依赖的ASM版本冲突导致的。你可以通过以下方式处理:

  • 升级Guice版本:如果你的Guice版本较旧,建议升级到与Guava 26.0-jre兼容的版本(比如Guice 4.2.3),它依赖的ASM版本更稳定,能避免解析异常。
  • 使用Shade插件隔离ASM:如果无法升级Guice,可以用Maven Shade插件将Guice依赖的ASM重命名,避免与Jetty的ASM冲突:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>org.objectweb.asm</pattern>
                        <shadedPattern>your.package.shaded.asm</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
        </execution>
    </executions>
</plugin>

3. 调整Jetty类加载策略

嵌入式Jetty 8的类加载顺序可能优先加载了系统或容器自带的旧版依赖,导致WEB-INF/lib中的新依赖无法生效。你可以调整类加载优先级:

WebAppContext webAppContext = new WebAppContext();
// 设置为false,让WEB-INF/lib中的类优先于父类加载器加载
webAppContext.setParentLoaderPriority(false);

验证步骤

  1. 执行mvn dependency:tree(或Gradle的dependencies命令),确认项目中只有Guava 26.0-jre这一个版本,没有其他Guava依赖。
  2. 清理项目编译目录(target或build),重新编译打包后部署到Jetty。

内容的提问来源于stack exchange,提问作者Avinaba GHOSH HAJRA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:47:02