【问题标题】:Using Google API in Java source code在 Java 源代码中使用 Google API
【发布时间】: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


【解决方案1】:

事实证明,在使用 Eclipse 时,必须在 Eclipse 本身中设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量,而不是在 Windows 系统设置中。我所要做的就是进入 Eclipse,单击“运行”下拉列表,选择“运行配置”,打开“环境”选项卡,然后在那里设置该环境变量。然后我收到一个错误,说我必须启用计费,并且只是在我的谷歌云平台设置中这样做。之后一切正常!

【讨论】:

  • 您仍然可以在 Windows 中设置这些环境变量(如果您希望它们是系统范围的);您只需要重新启动 Eclipse 以便 Eclipse 接收它们。如果您希望它们是 Project 或 Run 特定的,那么在 Eclipse 中设置它们将起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
相关资源
最近更新 更多