NoSuchMethodError с Джексоном при попытке загрузить файлы в Amazon S3 с помощью java.

Мой проект пытается загрузить файлы в Amazon S3 с помощью aws-java-sdk-1.11.15. Я использую ant для создания своего проекта в интерфейсе командной строки. Я использую версию Джексона 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 (новый PutObjectRequest (bucketName, keyName, file));


person srao    schedule 14.07.2016    source источник
comment
Вы решили это? У меня такая же ошибка с jackson 2.6.6. Но я заметил, что такой метод есть и в 2.6.6, и в 2.8.2.   -  person Jack    schedule 05.09.2016
comment
да. Это была проблема с версиями Джексона.   -  person srao    schedule 06.09.2016
comment
Думаю, я лучше определил свою проблему. Я использую glassfish-4.1, который поставляется с собственной библиотекой Джексона (старой), в которой нет такого метода. В моем приложении используется не тот, который я предоставляю, а старый, который уже загружен сервером приложений. Я не нашел способа использовать s3client в glassfish-4.1   -  person Jack    schedule 07.09.2016


Ответы (3)


Как упомянул Кристоф Л., это конфликт версий библиотеки Джексона.

Вот способ, как легко и безопасно использовать Amazon SDK и последнюю версию Jackson в своем проекте:

Если вы используете другие библиотеки, зависящие от того, что Джексон конфликтует с версией, используемой Amazon SDK, рассмотрите возможность использования aws-java-sdk-bundle, который распространяется вместе со всеми необходимыми библиотеками под переименованными именами пакетов. Это дает вам возможность безопасно использовать библиотеку Amazon версии 1.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>

P.S. Актуально для Amazon SDK 1.11.172

person Yurii Bratchuk    schedule 11.08.2017
comment
Хотя это полезно, но это увеличило размер пакета приложения на 103 МБ. Мне нужно будет найти другой способ. - person Paramvir Singh Karwal; 22.11.2018

Похоже на конфликт версий библиотеки. 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 и повторить попытку.

person Christophe L    schedule 14.07.2016

Это может быть вызвано использованием внешних библиотек, если вы также используете Dagger или Butterknife, вы должны добавить гуаву в качестве зависимости к вашему build.gradle основному файлу, например, пути к классам:

com.google.guava:guava:20.0

С другой стороны, если у вас возникли проблемы с большей кучей для демона Gradle, вы можете увеличить добавление в свой radle файл:

 dexOptions {
        javaMaxHeapSize "4g"
    } 

Также не забудьте использовать annotationProcessor для компиляции ваших библиотек с такого рода проблемами, чтобы решить эту проблему.

person Francisco Durdin Garcia    schedule 09.03.2017
comment
Это относится к файлу radle - это должен быть Gradle? - person halfer; 17.12.2019