Как получить класс com.google.common.base.Precondition для API Java gDrive?

Я пытаюсь получить интерфейс Java, работающий с API Google Диска, следуя краткому руководству, но каждый раз, когда я запускаю свою программу, она выдает «NoClassDefFoundError: com/google/common/base/Preconditions». Это также произошло, когда я попытался внедрить Google CustomSearchEngine API.

Я ссылался на все классы API с прикрепленными источниками и javadocs и без них. Я также пытался использовать findJAR dot com, пытаясь получить предварительные условия, но без особого успеха.

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

Строка 61:

/*
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

InputStream in = new FileInputStream(clientSecretFilePath);
*/

GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

Строка 88:

/*
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
*/

Credential credential = getCredentials(HTTP_TRANSPORT);

Ошибка:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
    at com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127)
    at com.google.api.client.json.jackson2.JacksonFactory.createJsonParser(JacksonFactory.java:80)
    at com.google.api.client.json.JsonFactory.fromReader(JsonFactory.java:236)
    at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.load(GoogleClientSecrets.java:192)
    at drive.GDrive.getCredentials(GDrive.java:61)
    at drive.GDrive.main(GDrive.java:88)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Preconditions
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

Похоже, что класс отсутствует, но я сослался на все библиотеки API из API Google Диска в конфигурации сборки. Я даже пытался получить недостающий класс от findjar dot com с небольшим дополнительным прогрессом.

Я пытаюсь включить guava-28.1-jre.jar в путь сборки и запуска. Но затем я получу другое сообщение об ошибке "java.lang.NoClassDefFoundError: com/google/api/client/repackaged/com/google/common/base/Prec‌​onditions"

Cheok Yan Cheng 21.11.2019 06:38

Привет @Percy, не могли бы вы добавить свой файл pom.xml в сообщение?

tomdaly 21.11.2019 16:03

@CheokYanCheng Не могли бы вы перечислить зависимости в вашем pom.xml/build.gradle? Если вы не используете инструмент сборки, перечислите все используемые вами банки.

Eng.Fouad 21.11.2019 16:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
3
1 872
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я создал небольшой проект, который без проблем следовал руководству по быстрому запуску.

https://github.com/lssilva/googleDriveApi/

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

git clone https://github.com/lssilva/googleDriveApi.git
gradle run
Ответ принят как подходящий

Удалите существующие зависимости и добавьте зависимости по ссылкам ниже:

google-api-клиент-1.23.0

google-oauth-client-jetty-1.23.0

google-api-services-drive-v3-rev110-1.23.0

Удачного кодирования :-)

У меня была такая же проблема при реализации PayU SDK для Android. Решение состояло в том, чтобы добавить зависимости гуавы для андроид, а не для jre:

  implementation("com.google.guava:guava:28.1-android")

Для получения дополнительной информации см. хранилище или проверьте Android-гуава вики, предпочтительно Предварительные условия.

Также советую заглянуть в Правила Proguard для гуавы, чтобы исключить из сборок все то, что вы не используете в проекте.

Другие вопросы по теме