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

Scala胖jar中AWS SDK ExecutionInterceptorChain缺失S3拦截器问题

问题分析与解决方案

核心原因:execution.interceptors 文件合并策略错误

你遇到的问题大概率是first合并策略导致的。AWS SDK每个服务(比如S3)都会在software/amazon/awssdk/services/{service}/execution.interceptors文件里声明专属拦截器,构建胖jar时如果存在多个这类文件,first策略只会保留第一个被扫描到的内容,S3的拦截器配置直接被覆盖,自然无法加载对应的拦截器类。

验证方法

解压你的胖jar,对比两处的software/amazon/awssdk/services/s3/execution.interceptors文件:

  • 本地依赖中的该文件,应该包含software.amazon.awssdk.services.s3.internal.handlers相关的拦截器条目
  • 胖jar里的同名文件,大概率没有这些S3专属的配置内容,甚至可能是其他服务的配置

修复步骤:修改合并策略

在build.sbt里给AWS SDK的拦截器配置文件单独设置concat合并策略,把所有服务的配置内容拼接在一起:

assemblyMergeStrategy in assembly := {
  // 针对AWS SDK的服务拦截器配置文件,使用concat合并
  case PathList("software", "amazon", "awssdk", "services", _, "execution.interceptors") => MergeStrategy.concat
  // 保留你原有的其他合并规则
  case other =>
    val originalStrategy = (assemblyMergeStrategy in assembly).value
    originalStrategy(other)
}

其他排查方向

  • 依赖范围错误:检查S3相关依赖的scope是否设为provided或test,这种情况下胖jar不会打包这些依赖,直接导致拦截器类缺失。确保依赖是默认的compile范围:
    libraryDependencies += "software.amazon.awssdk" % "s3" % "2.x.x" // 替换成你实际使用的版本
    
  • 类加载器差异:本地运行时用的是SBT/IntelliJ的类加载器,能读取所有依赖的资源文件;而胖jar使用系统类加载器,资源文件合并错误就无法被正确读取。还要确认有没有其他插件或配置删除了这类资源文件。
  • 版本冲突:检查AWS SDK各模块的版本是否一致,混合不同版本的SDK模块可能导致拦截器加载逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:55:16