Хобрук: Ваш путь к мастерству в программировании

Клиентская библиотека Google Ads API Java: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull

Попытка использовать клиентскую библиотеку Java Google Ads API для доступа к Adwords API (фрагмент кода взят из README проекта):

val credential = new OfflineCredentials.Builder()
  .forApi(OfflineCredentials.Api.ADWORDS)
  .withClientSecrets(clientId, clientSecret)
  .withRefreshToken(refreshToken)
  .build()
  .generateCredential()

Это не удается с ошибкой:

[info] Exception encountered when attempting to run a suite with class name: AdwordsClientSpec *** ABORTED ***
[info]   java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
[info]   at com.google.api.ads.common.lib.auth.OfflineCredentials$Api.<init>(OfflineCredentials.java:89)
[info]   at com.google.api.ads.common.lib.auth.OfflineCredentials$Api.<clinit>(OfflineCredentials.java:81)
[info]   at AdwordsClient$.generateAdwordsCredential(AdwordsClient.scala:24)
[info]   at AdwordsClientSpec$$anonfun$1.apply$mcV$sp(AdwordsClientSpec.scala:23)
[info]   at AdwordsClientSpec$$anonfun$1.apply(AdwordsClientSpec.scala:18)
[info]   at AdwordsClientSpec$$anonfun$1.apply(AdwordsClientSpec.scala:18)
[info]   at org.scalatest.Transformer$$anonfun$apply$1.apply$mcV$sp(Transformer.scala:22)
[info]   at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
[info]   at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
[info]   at org.scalatest.Transformer.apply(Transformer.scala:22)

Похоже, что некоторые зависимости не разрешены правильно. Я использую самые последние версии обоих артефактов, упомянутых в README с sbt:

 "com.google.api-ads" % "ads-lib" % "3.5.0",
 "com.google.api-ads" % "adwords-axis" % "3.5.0"
26.07.2017

  • Это похоже на конфликт версий Guava - есть ли у вас какие-либо зависимости Guava (прямые или транзитивные) в вашем проекте? (помимо того, что используется в библиотеке Google API). Если вы не уверены, отредактируйте сообщение, включив в него все ваши зависимости SBT. 26.07.2017
  • @TzachZohar спасибо за этот совет, это была полезная отправная точка для решения этой проблемы. 28.07.2017

Ответы:


1

Как указал @TzachZoha, существует конфликт версий с Guava. com.google.api-ads использует Guava 16.0, а не Guava 20.0. Я смог скомпилировать свой код, изменив определение сборки sbt:

  ("com.google.api-ads" % "ads-lib" % "3.5.0").exclude(
    "com.google.guava", "guava"),
  "com.google.api-ads" % "adwords-axis" % "3.5.0",
  "com.google.guava" % "guava" % "20.0"
28.07.2017

2

Я смог решить эту проблему, удалив банку Google Collections из моей папки lib, которая пришла вместе с некоторыми другими банками; см. https://code.google.com/archive/p/google-collections/#

27.04.2018
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..