6

我的项目正在尝试使用 aws-java-sdk-1.11.15 将文件上传到 Amazon S3。我正在使用 ant 在 CLI 上构建我的项目。我使用的杰克逊版本是 2.8.0。我正在将我的 lib 文件夹添加到我的类路径中。我所有的 jar 文件都在我的 lib 文件夹中。我在运行我的代码时得到以下信息 -

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.enable([Lcom/fasterx
ml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/databind/ObjectMapper;
at com.amazonaws.partitions.PartitionsLoader.(PartitionsLoader.java:54)
at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:66)
at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:54)
at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:107)
at com.amazonaws.services.s3.AmazonS3Client.createSigner(AmazonS3Client.java:3256)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3952)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1538)
at code4goal.antony.resumeparser.ResumeParserProgram.main(ResumeParserProgram.java:613)

对于这段代码 -

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
try
{
    File file = new File(uploadFileName);
    s3client.putObject(new PutObjectRequest(bucketName, keyName, file));
}

错误在 s3client.putObject(new PutObjectRequest(bucketName, keyName, file));

4

4 回答 4

8

正如 Christophe L 提到的,那是杰克逊库版本冲突。

这是一种在您的项目中轻松安全地使用 Amazon SDK 和最新 Jackson 的方法:

如果您使用其他依赖于 Jackson 的库与 Amazon SDK 使用的版本冲突,请考虑使用aws-java-sdk-bundle将它与所有需要的库一起分发,并通过重命名包名。这使您可以安全地一起使用 Amazon Library v1.11.15 和最新的 Jackson。
更多信息:https ://aws.amazon.com/blogs/developer/java-sdk-bundle/

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-bundle</artifactId>
        <version>1.11.15</version>
        <!-- <version>1.11.172</version> -->
    </dependency>

PS 实际适用于 Amazon SDK 1.11.172

于 2017-08-11T08:23:21.813 回答
2

似乎是库版本冲突。AWS Java SDK 1.11.15 依赖于 Jackson 版本 2.6.6(请参阅http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core/1.11.15)。Jackson 可能在 2.8.0 中有一些重大更改,因此您可能想尝试将其降级到 2.6.6 并重试。

于 2016-07-14T18:55:32.263 回答
0

如果您也在使用外部库,Dagger或者Butterknife您应该将 guava 作为依赖项添加到您的build.gradle主文件,例如 classpath ,则可能会导致使用外部库:

com.google.guava:guava:20.0

另一方面,如果您在 Gradle 守护程序的较大堆上遇到问题,您可以增加添加到radle文件中:

 dexOptions {
        javaMaxHeapSize "4g"
    } 

还记得annotationProcessor用这种问题来编译你的库来解决问题。

于 2017-03-09T15:24:02.963 回答
0

尝试使用 aws-java-sdk-bundle-1.12.39 库,我解决了。使用 bundle 后也尝试包含 com.amazonaws.thirdparty.*。

于 2021-08-05T12:30:35.510 回答