我的项目是尝试使用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));
答案 0 :(得分:5)
正如Christophe L所说,那是杰克逊图书馆版本的冲突。
这是一种如何轻松和方便的方法。在您的项目中安全地使用Amazon SDK和最新的Jackson:
如果您使用依赖Jackson与Amazon SDK使用的版本冲突的其他库,请考虑使用 aws-java-sdk-bundle 它通过重命名的包名称与所有必需的库一起分发。这使您可以安全地使用亚马逊图书馆的v1.11.15和最新的杰克逊 更多信息: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>
P.S。亚马逊SDK 1.11.172的实际值
答案 1 :(得分:2)
看起来像是库版本冲突。 AWS Java SDK 1.11.15依赖于Jackson 2.6.6版(参见http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core/1.11.15)。杰克逊可能会在2.8.0中有一些重大变化,所以你可能想尝试将其降级到2.6.6并再试一次。
答案 2 :(得分:0)
如果您还使用Dagger
或Butterknife
,可能会导致使用外部库,您应该将guava作为依赖项添加到build.gradle
主文件中,如classpath:
com.google.guava:guava:20.0
另一方面,如果您在使用Gradle守护程序的较大堆时出现问题,则可以增加对radle
文件的添加:
dexOptions {
javaMaxHeapSize "4g"
}
还要记得使用annotationProcessor
编译你的库以解决这个问题。
答案 3 :(得分:0)
尝试使用 aws-java-sdk-bundle-1.12.39 库,我解决了。尝试在使用 bundle 后包含 com.amazonaws.thirdparty.*。