Исключение API Cloud Vision в основном потоке java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument

Я выполнил все шаги в https://cloud.google.com/vision/docs/ocr и при выполнении кода я получаю следующее исключение.

Полная трассировка стека:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
    at io.grpc.Metadata$Key.validateName(Metadata.java:742)
    at io.grpc.Metadata$Key.<init>(Metadata.java:750)
    at io.grpc.Metadata$Key.<init>(Metadata.java:668)
    at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:959)
    at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:954)
    at io.grpc.Metadata$Key.of(Metadata.java:705)
    at io.grpc.Metadata$Key.of(Metadata.java:701)
    at com.google.api.gax.grpc.GrpcHeaderInterceptor.<init>(GrpcHeaderInterceptor.java:60)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:228)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.access$1500(InstantiatingGrpcChannelProvider.java:71)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider$1.createSingleChannel(InstantiatingGrpcChannelProvider.java:202)
    at com.google.api.gax.grpc.ChannelPool.create(ChannelPool.java:72)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createChannel(InstantiatingGrpcChannelProvider.java:209)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:192)
    at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:155)
    at com.google.cloud.vision.v1.stub.GrpcImageAnnotatorStub.create(GrpcImageAnnotatorStub.java:117)
    at com.google.cloud.vision.v1.stub.ImageAnnotatorStubSettings.createStub(ImageAnnotatorStubSettings.java:156)
    at com.google.cloud.vision.v1.ImageAnnotatorClient.<init>(ImageAnnotatorClient.java:136)
    at com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:117)
    at com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:108)

Я пробовал использовать разные версии Guava (22.0 и 23.6) и HttpCore (5.0 и 4.4.8), чем те, которые уже используются в библиотеках Google Cloud Platform (28.2 и 4.4.12), но мне не повезло.

Я использую Eclipse, использовал Eclipse и выполнил следующие действия: https://cloud.google.com/eclipse/docs/libraries


person Nicolas Guffanti    schedule 04.04.2020    source источник
comment
Не могли бы вы поделиться своим pom.xml? Меня интересует раздел dependency и dependencyManagement.   -  person suztomo    schedule 07.04.2020
comment
вот pom.xml: jsfiddle.net/2m438wfd   -  person Nicolas Guffanti    schedule 08.04.2020
comment
Мне удалось выполнить этот запуск, загрузив весь проект с GitHub, см. Последний ответ.   -  person Nicolas Guffanti    schedule 08.04.2020
comment
Я не вижу, что вы используете спецификацию библиотек GCP. Документ: github.com/GoogleCloudPlatform/ облако-openource-java / wiki /. По сути, с помощью спецификации вам не нужно устанавливать отдельные версии библиотек.   -  person suztomo    schedule 08.04.2020
comment
Да, я добавил эти строки в файл pom.xml, но мне все равно не удалось его правильно запустить. Я действительно не знаю, что было не так, и смог исправить это, клонировав весь проект видения.   -  person Nicolas Guffanti    schedule 08.04.2020
comment
Вы можете поделиться этим pom.xml? ›Я добавил эти строки в файл pom.xml   -  person suztomo    schedule 08.04.2020
comment
Это мой pom.xml: jsfiddle.net/mu49650w, а эффективный POM находится здесь: jsfiddle.net/2m438wfd   -  person Nicolas Guffanti    schedule 08.04.2020
comment
Кажется, ваша помпа правильно использует спецификацию. Я постараюсь воспроизвести вашу проблему завтра.   -  person suztomo    schedule 10.04.2020
comment
Я проверил pom.xml. Спецификация библиотек GCP имеет Guava 28.2-android. В этой версии Guava есть Preconditions.checkArgument(boolean, String, char, Object). В вашем сообщении об ошибке указано иное. Скорее всего, pom.xml не тот, когда вы получили NoSuchMethodError. Вы уверены, что используете 28.2-android? В своей среде IDE найдите class com.google.common.base.Preconditions class. Какой файл JAR содержит класс?   -  person suztomo    schedule 10.04.2020


Ответы (3)


Как вы отметили, такого рода ошибки обычно указывают на несовпадение версий. Вы не сказали, используете ли вы Maven или собственный проект Cloud Tools для Eclipse. Я бы рекомендовал вам использовать настройку Maven, чтобы вы могли воспользоваться преимуществами спецификация облачных библиотек. Это должно устранить эти несоответствия версий.

person Brian de Alwis    schedule 04.04.2020
comment
Я использую Eclipse, использовал Eclipse и выполнил следующие действия: cloud.google.com/eclipse/ docs / libraries Я попытался сказать, что использую Eclipse Tools и на самом деле следую руководству по этой ссылке, в котором указано, как использовать Eclipse Tools. Я попробую Maven и вернусь к вам ... Спасибо - person Nicolas Guffanti; 05.04.2020
comment
Хорошо, только что попробовал с Maven, и у меня такая же ошибка. Единственная разница в том, что он заставил меня выполнить его с помощью JAVA 1.7. Я использовал 1.8. Но ошибка все равно присутствует. - person Nicolas Guffanti; 05.04.2020
comment
Не могли бы вы назвать мне версию книги, которую вы используете? - person Brian de Alwis; 06.04.2020
comment
Что вы имеете в виду под книгой? Что касается Cloud Vision, я использую последнюю версию, доступную сегодня (1.99.2), одна из ее зависимостей - guava-28.2-android. Наверное, другое дело, несовпадения версий быть не может, пробовал много разных версий гуавы ... - person Nicolas Guffanti; 06.04.2020
comment
Извини, я имел в виду бомж. На помощь приходит полезная автокоррекция. - person Brian de Alwis; 07.04.2020
comment
Я использовал 4.4.1, обновил до 4.4.2 и все еще имел ту же ошибку ... Думаю, проблема в другом, но я не знаю, что еще искать. - person Nicolas Guffanti; 07.04.2020

Эта трассировка стека указывает, что ваш путь к классам включает старую версию Guava или клиента OCR, или и того, и другого. Без полного проекта для проверки я не могу точно сказать, как вы получаете эту старую версию - это зависит от того, как вы настроили проект, - но это определенно то, что происходит.

person Elliotte Rusty Harold    schedule 07.04.2020

Хорошо, я выполнил этот запуск, клонировав весь проект java vision из GitHub: https://github.com/googleapis/java-vision.

Однако мне все равно пришлось добавить несколько дополнительных банок, поскольку существовали ошибки пути.

person Nicolas Guffanti    schedule 08.04.2020
comment
Вам не нужно клонировать репозиторий библиотеки, чтобы использовать библиотеку. Достаточно добавить зависимость к вашему pom. - person suztomo; 08.04.2020
comment
Это был единственный способ запустить его ... На самом деле мне даже пришлось изменить клонированное репо, например, в классе ImageAnnotatorClient, который он запрашивал для реализации AutoClosable, который не реализовывался. - person Nicolas Guffanti; 08.04.2020