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

AWS SDK v2中S3Client与S3TransferManager共存冲突解决问询

问题:AWS SDK v2 S3与S3TransferManager依赖冲突导致NoSuchMethodError

场景说明

我正在开发Java项目,使用AWS SDK v2操作S3服务:

  • 通过S3Client调用getObject()、listObjects()等接口
  • 借助S3TransferManager实现文件上传/下载的日志记录

代码示例

static String sAccessKey = "XXXXXXXXXX";
static String sSecretKey = "XXXXXXXXXXXXX";
static AwsBasicCredentials awsCreds = AwsBasicCredentials.create(
        sAccessKey,
        sSecretKey);
AwsCredentialsProvider awsCredentialsProvider = StaticCredentialsProvider.create(awsCreds);
static S3Client s3Client = S3Client.builder().region(Region.US_WEST_2)
        .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
        .build();
S3TransferManager s3TransferManager = S3TransferManager
        .builder()
        .s3ClientConfiguration(S3ClientConfiguration.builder()
                .region(Region.US_WEST_2)
                .credentialsProvider(awsCredentialsProvider).build()).build();


S3TransferManager s3TransferManager1 = S3TransferManager.create();
Region region = Region.US_WEST_2;
S3ClientConfiguration s3ClientConfiguration =
        S3ClientConfiguration.builder()
                .region(region)
                .credentialsProvider(awsCredentialsProvider)
                .targetThroughputInGbps(20.0)
                .build();

Upload upload =
        s3TransferManager1.upload(b -> b.putObjectRequest(r -> r.bucket("SSSS").key("test.ppt"))
                .source(Paths.get("fileToUpload.txt")));

错误信息

Exception in thread "main" java.lang.NoSuchMethodError: software.amazon.awssdk.utils.Validate.isPositiveOrNull(Ljava/lang/Double;Ljava/lang/String;)Ljava/lang/Double;
at software.amazon.awssdk.transfer.s3.S3ClientConfiguration.<init>(S3ClientConfiguration.java:49)
at software.amazon.awssdk.transfer.s3.S3ClientConfiguration.<init>(S3ClientConfiguration.java:37)
at software.amazon.awssdk.transfer.s3.S3ClientConfiguration$DefaultBuilder.build(S3ClientConfiguration.java:301)
at software.amazon.awssdk.transfer.s3.S3ClientConfiguration$DefaultBuilder.build(S3ClientConfiguration.java:243)
at software.amazon.awssdk.transfer.s3.internal.DefaultS3TransferManager$DefaultBuilder.<init>(DefaultS3TransferManager.java:405)
at software.amazon.awssdk.transfer.s3.internal.DefaultS3TransferManager$DefaultBuilder.<init>(DefaultS3TransferManager.java:404)
at software.amazon.awssdk.transfer.s3.internal.DefaultS3TransferManager.builder(DefaultS3TransferManager.java:364)
at software.amazon.awssdk.transfer.s3.S3TransferManager.builder(S3TransferManager.java:497)
at com.bucketexplorer.main.SdkTest.main(SdkTest.java:88)

依赖冲突原因

当前引入的两个Jar包版本差异过大,导致内部工具类方法不兼容:

  • s3-2.16.46.jar
  • s3-transfer-manager-2.17.257-PREVIEW.jar

解决方案

1. 统一所有AWS SDK v2组件版本

AWS SDK v2的所有核心组件(包括S3、TransferManager)必须使用完全一致的版本,否则会因为内部依赖的工具类、核心API版本不匹配出现方法缺失错误。

  • 优先将s3-2.16.46.jar升级到2.17.257版本,与TransferManager保持一致;若TransferManager预览版在旧版本不可用,请勿降级TransferManager。

2. 使用依赖管理工具统一版本(推荐)

通过Maven或Gradle的版本管理功能,强制所有AWS SDK依赖使用同一版本,避免手动引入不同版本Jar包:

  • Maven配置:
<properties>
    <aws.sdk.version>2.17.257</aws.sdk.version>
</properties>

<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3-transfer-manager</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
</dependencies>
  • Gradle配置:
plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation platform('software.amazon.awssdk:bom:2.17.257')
    implementation 'software.amazon.awssdk:s3'
    implementation 'software.amazon.awssdk:s3-transfer-manager'
}

3. 清理冲突依赖

检查项目依赖树,排除旧版本的AWS核心工具类Jar包:

  • Maven执行mvn dependency:tree查看依赖树,找到冲突的aws-sdk-core或utils依赖,通过<exclusions>标签排除旧版本
  • Gradle执行./gradlew dependencies查看依赖树,通过exclude方法移除冲突依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:25:18