使用Java SQS SDK时如何解决AWS V1与V2版本不匹配问题
问题原因分析
- 你引入的
software.amazon.awssdk:sqsv2依赖本身依赖同版本的AWS SDK v2核心模块中的内部拦截器类,本地运行时会加载Maven本地仓库的完整传递依赖,所以不会报错。 - 打包时类缺失通常是两个原因:一是Maven依赖调解规则把AWS SDK v2的核心传递依赖覆盖/排除了;二是maven shade插件开启了最小化Jar配置,把未被显式调用的内部拦截器类判定为无用类直接裁剪掉了,AWS SDK v1和v2共存时的类加载冲突也可能触发该问题。
解决方案
1. 显式声明同版本核心依赖
在pom.xml中强制引入和SQS模块版本一致的核心依赖,避免传递依赖被覆盖:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>core</artifactId> <version>2.14.23</version> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>regions</artifactId> <version>2.14.23</version> </dependency>
2. 修正maven shade插件配置
如果开启了<minimizeJar>true</minimizeJar>最小化Jar配置,需要添加规则禁止裁剪AWS SDK v2的所有类:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <configuration> <minimizeJar>true</minimizeJar> <filters> <filter> <artifact>software.amazon.awssdk:*</artifact> <includes> <include>**/*</include> </includes> </filter> <!-- 其余原有过滤规则保持不变 --> </filters> <!-- 如存在SDK v1和v2类冲突,添加以下重定位规则 --> <relocations> <relocation> <pattern>software.amazon.awssdk</pattern> <shadedPattern>shaded.software.amazon.awssdk</shadedPattern> </relocation> </relocations> </configuration> <!-- 其余原有transformer等配置保持不变 --> </plugin>
3. 打包后校验
打包完成后执行以下命令,验证缺失类是否已打入Jar包:
jar tf 你的打包文件.jar | grep MessageMD5ChecksumInterceptor
有对应输出即可正常部署到Lambda环境。
内容的提问来源于stack exchange,提问作者PloniStacker
相关产品推荐
相关产品推荐

