Я пытаюсь получить интерфейс 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 с небольшим дополнительным прогрессом.
Привет @Percy, не могли бы вы добавить свой файл pom.xml в сообщение?
@CheokYanCheng Не могли бы вы перечислить зависимости в вашем pom.xml/build.gradle? Если вы не используете инструмент сборки, перечислите все используемые вами банки.




Я создал небольшой проект, который без проблем следовал руководству по быстрому запуску.
https://github.com/lssilva/googleDriveApi/
У меня это сработало нормально, я не фиксировал учетные данные, но если вы замените их своими, все должно работать, как описано в документации.
git clone https://github.com/lssilva/googleDriveApi.git
gradle run
Удалите существующие зависимости и добавьте зависимости по ссылкам ниже:
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 для гуавы, чтобы исключить из сборок все то, что вы не используете в проекте.
Я пытаюсь включить
guava-28.1-jre.jarв путь сборки и запуска. Но затем я получу другое сообщение об ошибке "java.lang.NoClassDefFoundError: com/google/api/client/repackaged/com/google/common/base/Preconditions"