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

使用Jest客户端向AWS ElasticSearch写入数据时遇NoSuchMethodError求助

解决Jest写入AWS ElasticSearch时的NoSuchMethodError问题

这个问题我之前帮别人排查过,大概率是Guava版本冲突搞的鬼!Flink 1.3.x系列依赖的Guava版本比较老旧,而Jest客户端(或者它的底层依赖)需要的是更新版的Guava,两者的com.google.common.base.Preconditions.checkArgument方法签名不匹配,就抛出了这个NoSuchMethodError。

下面给你几个落地的解决方案:

1. 先排查清楚依赖冲突

先用sbt命令看看项目里Guava的依赖情况,到底是哪些包引入了不同版本:

sbt dependencyTree | grep guava

执行后你会发现,Flink相关依赖大概率带的是Guava 18.0左右的版本,而Jest那边需要的是20.0及以上的版本,这就是冲突根源。

2. 强制统一Guava版本

最简单的办法是在你的sbt依赖配置里,强制指定一个兼容两边的Guava版本,比如20.0:

libraryDependencies ++= Seq(
  // 你的现有依赖...
  "org.apache.flink" % "flink-core" % "1.3.2",
  "org.apache.flink" % "flink-scala_2.11" % "1.3.2",
  "org.apache.flink" % "flink-streaming-scala_2.11" % "1.3.2",
  "org.apache.flink" % "flink-shaded-hadoop2" % "1.4.0",
  "org.apache.flink" %% "flink-yarn" % "1.3.2",
  "com.typesafe.play" %% "play-json" % "2.6.2",
  "org.apache.flink" % "flink-clients_2.11" % "1.3.2",
  // 新增强制Guava版本
  "com.google.guava" % "guava" % "20.0" force()
)

force()关键字会让sbt忽略所有其他依赖引入的Guava版本,统一用你指定的这个版本,直接解决冲突。

3. 手动排除冲突的旧版Guava

如果强制版本后遇到其他兼容问题,也可以手动从Flink的依赖里把旧Guava排除掉,再引入新版本:

libraryDependencies ++= Seq(
  "org.apache.flink" % "flink-core" % "1.3.2" exclude("com.google.guava", "guava"),
  "org.apache.flink" % "flink-scala_2.11" % "1.3.2" exclude("com.google.guava", "guava"),
  "org.apache.flink" % "flink-streaming-scala_2.11" % "1.3.2" exclude("com.google.guava", "guava"),
  "org.apache.flink" % "flink-shaded-hadoop2" % "1.4.0" exclude("com.google.guava", "guava"),
  "org.apache.flink" %% "flink-yarn" % "1.3.2" exclude("com.google.guava", "guava"),
  "com.typesafe.play" %% "play-json" % "2.6.2",
  "org.apache.flink" % "flink-clients_2.11" % "1.3.2" exclude("com.google.guava", "guava"),
  // 引入统一的新版本Guava
  "com.google.guava" % "guava" % "20.0",
  // 确保Jest版本兼容Scala 2.11
  "io.searchbox" % "jest" % "5.3.3"
)

这种方式更灵活,能精准控制每个依赖的引入内容。

额外小提示

  • 可以用sbt dependencyUpdates命令检查所有依赖的版本更新情况,提前规避一些潜在的版本冲突。
  • 先在本地环境测试验证依赖冲突解决后,再部署到Yarn集群,避免集群环境的依赖干扰。

内容的提问来源于stack exchange,提问作者Chengzhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:35