我需要在GAE应用程序中初始化驱动器服务。我使用的是带有3兆的OAuth 2.0。我使用常规的谷歌账户(没有服务账户)。我正在尝试:
GoogleCredential credentials = usuarioService.getGoogleCredentials();
Drive service = new Drive.Builder(TRANSPORT, JSON_FACTORY, credentials).build();
我得到了这个错误:
Caused by: java.lang.NoSuchFieldError: MAJOR_VERSION
at com.google.api.services.drive.Drive.<clinit>(Drive.java:48)
at com.google.api.services.drive.Drive$Builder.build(Drive.java:8243)
OAuth 2.0流授权正在工作,但访问驱动器时出现上述错误。
我不认为我的GoogleCredentials是错误的,因为我使用相同的方法来获得授权以使用GooglePicker。
我如何从用户那里获得GoogleCredential的方法是:
GoogleCredential credentials = new GoogleCredential.Builder()
.setClientSecrets(clientId, clientSecret)
.setJsonFactory(JSON_FACTORY)
.setTransport(HTTP_TRANSPORT)
.build()
.setRefreshToken(user.getOAuth2RefreshToken())
.setAccessToken(user.getOAuth2AccessToken()); //previous Access Token
你能帮我吗?
迭戈。
更新我已经更新了驱动器库到最后一个(v2)和谷歌api客户端1.18,但它仍然不起作用。
现在我得到这个错误:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.google.api.services.drive.Drive
更新2考虑到我在重建GoogleCredential对象时做错了什么,当我从授权流请求原始凭据时,我试图调用Drive.Builder():
final GoogleTokenResponse response = flow.newTokenRequest(authCode).setRedirectUri(callback).execute();
Credential credential = flow.createAndStoreCredential(response, null);
// Calling to Drive Service
Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build();
我得到了同样的错误:
Caused by: java.lang.NoSuchFieldError: MAJOR_VERSION
我对日历做了同样的操作,但我得到了同样的错误
我正在使用以下库:谷歌api客户端1.18
谷歌api客户端servlet 1.18
谷歌api-service-drive-v2-1.18
谷歌http客户端1.18
谷歌http客户端jackson 1.18
谷歌oauth客户端1.18
解决方案:
喝了很多杯咖啡后,我发现了错误。
我已经清理了我的项目中的一些库,我使用的是1.15版本的谷歌库,它正在工作(相同的代码)。