2016-07-14 18 views
3

私のプロジェクトは、aws-java-sdk-1.11.15を使用してAmazon S3にファイルをアップロードしようとしています。 CLIでプロジェクトをビルドするためにantを使用しています。私が使っているjacksonのバージョンは2.8.0です。クラスパスにlibフォルダを追加しています。すべての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、keyNameの、ファイル))s3client.putObjectです。

+0

あなたはこれを解決しましたか?私はjackson 2.6.6と同じエラーがあります。しかし、私はそのような方法が2.6.6と2.8.2の両方に存在することに気づいた。 – Jack

+0

はい。それはジャクソン版の問題でした。 – srao

+0

私は自分の問題をよりよく特定したと思う。私はそのような方法を持たない独自のjacksonライブラリ(古いもの)が付属している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にダウングレードしてやり直してみてください。

0

また、あなたはクラスパスのようなあなたのbuild.gradleメインファイルへの依存関係としてグアバを追加するButterknifeすべきDaggerを使用したりしている場合には、使用の外部ライブラリのために発生する可能性があります。一方で

com.google.guava:guava:20.0

、また、に覚え

dexOptions { 
     javaMaxHeapSize "4g" 
    } 

:あなたはGradleのデーモンの大きなヒープに問題がある場合は、あなたのradleファイルに追加増やすことができますannotationProcessorを使用して、この種の問題でライブラリをコンパイルして問題を解決してください。

1

クリストフLが言及したように、それはジャクソンのライブラリバージョンの競合です。

あなたがアマゾンSDKによって使用されるバージョンとジャクソンの競合に依存他のライブラリを使用する場合は、AWSを使用することを検討してください:ここでは

は簡単&が安全にあなたのプロジェクトにアマゾンSDKと最新ジャクソンを使用する方法の方法です-java-sdk-bundle名前が変更されたパッケージ名ですべての必要なライブラリと共に配布されます。これにより、v1.11.15のAmazonライブラリと最新の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

関連する問題