繁体   English   中英

如何获取 Java gDrive api 的 com.google.common.base.Precondition 类?

[英]How do I get class com.google.common.base.Precondition for Java gDrive api?

我正在尝试按照快速入门教程使用 Google Drive API 获取 Java 接口,但是每次我运行我的程序时,它都会抛出“NoClassDefFoundError:com/google/common/base/Preconditions”。 当我尝试实现 Google CustomSearchEngine API 时也发生了这种情况。

我已经引用了所有带有和不带有源代码和 javadocs 的 API 类。 我还尝试使用 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

它看起来好像缺少一个类,但我在构建配置中引用了来自 Google Drive 的 API 的所有 API 库。 我什至尝试从 findjar dot com 获取丢失的类,但几乎没有额外的进展。

删除现有依赖项并从以下链接添加依赖项:

google-api-client-1.23.0

google-oauth-client-jetty-1.23.0

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

快乐编码:-)

相同的问题: 我无法使用Maven找到com.google.api.client.util.Preconditions的依赖项

似乎在模块google-api-client和google-http-client-jackson2之间存在版本冲突。 它们必须具有相同的1.17.0-rc版本。

我按照快速入门教程创建了一个小项目,没有任何问题。

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

它对我来说很好用,我没有提交凭据,但如果你用你的凭据替换,它应该像文档中描述的那样工作。

git clone https://github.com/lssilva/googleDriveApi.git
gradle run

我在为 Android实现PayU SDK时遇到了同样的问题。 解决方案是为android添加番石榴依赖项,而不是jre

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

有关它的更多信息,请参阅存储库或查看Android guava wiki ,最好是Preconditions

我还建议查看Guava 的 Proguard 规则,以从构建中排除您在项目中未使用的所有内容。

您是否尝试过手动添加此http://www.java2s.com/Code/JarDownload/com.google/com.google.guava_1.6.0.jar.zip jar? 如果您正在使用任何构建工具,则可能是番石榴jar的某些其他版本正在覆盖包含preconditions类的版本。 如果您正在使用Maven,请尝试运行mvndependency :: tree来检查是否有番石榴罐子冲突。

否则尝试在类路径本身的开始处在类路径中显式添加上述jar。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM