2016-07-14 6 views
3

내 프로젝트가 aws-java-sdk-1.11.15를 사용하여 Amazon S3에 파일을 업로드하려고합니다. 개미를 사용하여 CLI에서 프로젝트를 빌드하고 있습니다. 제가 사용하고있는 잭슨 버전은 2.8.0입니다. libpath 폴더를 클래스 경로에 추가하고 있습니다. 내 모든 jar 파일은 lib 폴더에 있습니다. 이 코드 조각을 위해Java를 사용하여 Amazon S3에 파일을 업로드하려고 시도하는 중 Jackson이있는 NoSuchMethodError.

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)); 
} 

오류 (새 PutObjectRequest (bucketName, 키 이름, 파일)) s3client.putObject에;

+0

해결 되었습니까? 나는 잭슨 2.6.6과 같은 오류가있다. 그러나 나는 2.6.6과 2.8.2에서 그러한 방법이 존재한다는 것을 알았다. – Jack

+0

예. 잭슨 버전의 문제였습니다. – srao

+0

문제를 더 잘 식별 할 수 있다고 생각하십시오. 나는 그런 방법이없는 자체 잭슨 라이브러리 (오래된 것)와 함께 제공되는 glassfish-4.1을 실행 중입니다. 내 응용 프로그램은 내가 제공 한 응용 프로그램을 사용하지 않고 응용 프로그램 서버에서 이미로드 한 이전 응용 프로그램을 사용합니다. glassfish-4.1에서 s3client를 사용할 방법을 찾지 못했습니다. – Jack

답변

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으로 다운 그레이드하고 다시 시도하십시오. 당신은 또한 클래스 패스처럼 build.gradle 주요 파일 종속성으로 구아바을 추가 당신이해야 Dagger 또는 Butterknife를 사용하는 경우

0

이 그것은 사용 외부 라이브러리 발생할 수 있습니다

반면에 com.google.guava:guava:20.0

,

dexOptions { 
     javaMaxHeapSize "4g" 
    } 

은 또한에 기억 : 당신은 당신이 당신의 radle 파일에 추가 높일 수 Gradle을 데몬에 대한 더 큰 힙에 문제가있는 경우 annotationProcessor을 사용하여이 종류의 문제로 라이브러리를 컴파일하여 문제를 해결하십시오.

1

Christophe L이 말한 것처럼 Jackson 라이브러리 버전 충돌입니다. 당신이 아마존 SDK에서 사용하는 버전 잭슨 충돌에 따라 다른 라이브러리를 사용하는 경우

AWS를 사용하는 고려하시기 바랍니다 : 여기에

쉽게 & 안전하게 프로젝트에 아마존 SDK 최신 잭슨을 사용하는 방법 방법이다 -java-sdk-bundle 이름이 바뀐 패키지 이름으로 필요한 모든 라이브러리와 함께 배포됩니다. 이렇게하면 v1.11.15의 Amazon Library와 최신 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> 

P.S. Amazon SDK 1.11.172에 대한 실제