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

使用Java SQS SDK时如何解决AWS V1与V2版本不匹配问题

问题原因分析
  • 你引入的software.amazon.awssdk:sqs v2依赖本身依赖同版本的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:10