【发布时间】:2016-11-03 04:33:19
【问题描述】:
我正在 Eclipse 中创建一个使用 Google API(自然语言处理)的 Java 项目,但出现错误:
应用程序默认凭据不可用。如果在 Google App Engine、Google Compute Engine 或 Google Cloud Shell 上运行,它们就可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。
在我的系统设置下,我进入系统并创建了一个环境变量(用户和系统),名称为:GOOGLE_APPLICATION_CREDENTIALS 和一个指向我的服务帐户 JSON 密钥的值,就像它在文档中所说的那样。我看到有些人在其他问题中也说要使用如下命令:export GOOGLE_APPLICATION_CREDENTIALS="path/to/json/file",但是当我在 Windows Bash 中这样做时,它什么也没做。
我实际上没有在我的 JAVA 代码中添加变量或路径,因为我不知道该怎么做,而且我在任何 Google 文档中都找不到答案。下面是尝试使用默认应用程序凭据的代码:
有些地方说要使用 Google App Engine 并使用默认凭据,但我宁愿不将项目上传到 Google App Engine 并使用我已经拥有的 JSON 凭据文件,似乎这样会更容易。
/**
* Connects to the Natural Language API using Application Default Credentials.
*/
public static CloudNaturalLanguageAPI getLanguageService()
throws IOException, GeneralSecurityException {
GoogleCredential credential =
GoogleCredential.getApplicationDefault().createScoped(CloudNaturalLanguageAPIScopes.all());
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
return new CloudNaturalLanguageAPI.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
jsonFactory, new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) throws IOException {
credential.initialize(request);
}
})
.setApplicationName(APPLICATION_NAME)
.build();
}
【问题讨论】:
-
Windows 中的 Bash 支持相对较新,可能 Google 的 API 尚未与它正确集成(或者 Window 的 Bash 实现中存在错误)。不久前,我在 Cygwin 上使用 GCS 遇到了 similar issue,解决方法可能也适合您。
-
感谢@dimo414 的建议,我在创建Java 应用程序时从未使用过命令行。我的理解是我必须将 GOOGLE_APPLICATION_CREDENTIALS 链接到我的 Java 代码中某处的文件,但从解决方法来看:
$ CLOUDSDK_CONFIG=$(cygpath -w ~/.config/gcloud) \ GOOGLE_APPLICATION_CREDENTIALS=$(cygpath -w ~/.config/gcloud)/application_default_credentials.json \ java -cp GCloudDemo.jar com.google.gcloud.examples.storage.StorageExample list Bucket{name=...}看起来它使用命令行。您能否详细说明我将如何实现它? -
@dimo414 还有,我还没有设置 Google App Engine、gcloud-java 或类似的东西,我只是启用了我的 API 并获得了我的服务帐户 JSON 密钥文件。在继续之前我必须做类似的事情吗?
-
对不起,我看到你提到了 Windows Bash,这让我想起了我与 Cygwin 的类似情况。您应该能够从 Windows Bash 运行相同样式的命令,调用您想要的任何
java应用程序(包括由 Eclipse 构建的应用程序),或者您可以将它们设置为您在答案中描述的环境变量。
标签: java windows google-api