我假设我在写作之前已经用谷歌搜索并阅读了文档,我注意到这也是 StackOverflow 上的一个流行讨论,但已经给出的答案都没有帮助我。
我创建了一个 Google Cloud 帐户来使用 API:Google Vision。
为此,我按照创建项目、添加上述 API 并最终创建带有密钥的服务帐户的步骤进行操作。
我下载了密钥并将其放在PC上java项目的文件夹中。
然后,由于它是一个 Maven 项目,我按照教程中的描述将依赖项添加到了 pom 中。
此时,我插入了建议的代码段以开始使用 API。
一切似乎都很好,一切都被读取,各种库/接口都被导入。
但当我尝试运行该程序时,出现了错误:
应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,则它们可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。
我必须承认我不知道“Google 计算引擎”是什么,但由于有替代方案并且我有一些凭据,所以我想尝试并遵循它。
所以我按照说明操作:
创建服务帐户后,您需要将服务帐户密钥下载到运行应用程序的计算机。您可以使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量或编写代码将服务帐户密钥传递给客户端库。
好的,我尝试了第一种方法,通过环境变量传递凭据:
$env:GOOGLE_APPLICATION_CREDENTIALS="my key path"
Run Code Online (Sandbox Code Playgroud)
set GOOGLE_APPLICATION_CREDENTIALS=my key path
Run Code Online (Sandbox Code Playgroud)
所以我尝试了第二种方法,使用代码传递凭据,如果我在这里,一定是其他地方出了问题,事实上,用我所拥有的,只能导入 io.grpc.Context,而其他所有内容都会给出错误“无法解析符号..”。
import com.google.common.collect.Lists;
import io.grpc.Context;
import java.io.FileInputStream;
import java.io.IOException;
public class Main
{
static void authExplicit(String jsonPath)
{
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath))
.createScoped( Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
Context.Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService(); …Run Code Online (Sandbox Code Playgroud)