Scala调用AWS Glue Schema Registry获取schema版本ID报错如何解决
问题修复方案
这个报错属于典型的AWS SDK版本冲突引发的NoSuchMethodError,本质是运行时加载的aws-java-sdk-core包版本,和schemas服务对应的SDK模块版本不匹配,缺少对应方法实现,可按以下步骤修复:
- 第一步:移除重复依赖
你不需要同时引入aws-java-sdk-core和全量aws-java-sdk依赖,全量包已经内置了core模块,重复引入极易触发版本冲突,直接删掉如下依赖配置即可:"com.amazonaws" % "aws-java-sdk-core" % "1.12.93" % Compile - 第二步(可选优化):替换为轻量化依赖
全量aws-java-sdk包体积很大,建议直接替换成你需要的schemas服务单独依赖,既能降低冲突概率,也能减少打包体积:// 把原来的全量aws-java-sdk依赖替换为下面这行 "com.amazonaws" % "aws-java-sdk-schemas" % "1.12.93" % Compile - 第三步:排查传递依赖冲突
如果修改后仍然报错,执行sbt的dependencyTree命令,过滤所有com.amazonaws开头的依赖,确保所有AWS SDK模块的版本完全一致,把其他依赖传递引入的不同版本AWS SDK手动排除即可。
额外提示:你当前的代码是查询符合前缀的schema列表,如果你要获取指定schema名称的所有版本ID,应该用
ListSchemaVersionsRequest,参考代码如下:val versionRequest = new ListSchemaVersionsRequest() versionRequest.setRegistryName("registry") versionRequest.setSchemaName("你要查询的schema完整名称") // 获取所有版本ID val versionIds = schemas.listSchemaVersions(versionRequest).getSchemaVersions.asScala.map(_.getSchemaVersionId)
内容的提问来源于stack exchange,提问作者MrElephant
相关产品推荐
相关产品推荐

