【问题标题】:How to fix error: A project ID is required for this service but could not be determined如何修复错误:此服务需要项目 ID,但无法确定
【发布时间】:2016-08-08 23:12:53
【问题描述】:

我正在尝试从 AppEngine 向 Google 数据存储区插入数据,但出现错误:

java.lang.IllegalArgumentException: A project ID is required for this service but could not be determined from the builder or the environment.  Please set a project ID using the builder.
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:92)
    at com.google.cloud.ServiceOptions.<init>(ServiceOptions.java:324)
    at com.google.cloud.datastore.DatastoreOptions.<init>(DatastoreOptions.java:85)
    at com.google.cloud.datastore.DatastoreOptions.<init>(DatastoreOptions.java:32)
    at com.google.cloud.datastore.DatastoreOptions$Builder.build(DatastoreOptions.java:75)
    at com.google.cloud.datastore.DatastoreOptions.defaultInstance(DatastoreOptions.java:123)

这是我的代码:

Datastore datastore = DatastoreOptions.defaultInstance().service();     
             KeyFactory keyFactory = datastore.newKeyFactory().kind("keyKind"); 
             Key key = keyFactory.newKey("keyName"); 
             Entity entity = Entity.builder(key) 
                 .set("name", "John Doe") 
                 .set("age", 30) 
                 .set("access_time", DateTime.now()) 
                 .build(); 
             datastore.put(entity); 

如何解决这个错误?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore gcloud gcloud-java


    【解决方案1】:

    在我的情况下,下一个代码正在运行:

        BigQuery bigquery = BigQueryOptions.newBuilder().setProjectId("XXXXX")
                .setCredentials(
                        ServiceAccountCredentials.fromStream(new FileInputStream("key.json"))
                ).build().getService();
    

    我在builder中设置了projectId。

    【讨论】:

    • Google 应该将此添加到提供的示例中。
    【解决方案2】:

    您运行的是 AE 标准还是 AE Flexible

    确保您的类路径(WEB-INF/lib 目录)中有 App Engine api jar

    【讨论】:

    • 我正在运行标准 AE。你是对的,类路径中缺少 api jar 是错误的原因。谢谢你的帮助。
    • 我在 appengine 柔性环境中使用自定义 VM 时遇到了同样的问题。将 jar 添加到应用程序类路径对我不起作用。有什么想法吗?
    • 那么,在您的情况下,您没有使用 AE 灵活兼容(与 AE API 兼容),而是使用“香草”版本?您使用的是哪个基础镜像 (cloud.google.com/appengine/docs/flexible/custom-runtimes/build)?一般来说,自动检测项目 ID 应基于此处描述的步骤github.com/GoogleCloudPlatform/… 和此代码github.com/GoogleCloudPlatform/google-cloud-java/blob/master/…
    • 使用此处描述的步骤 - cloud.google.com/appengine/docs/flexible/java/… 查看是否正确设置了任何预期的环境变量。
    • 我的基础镜像是:openjdk:8-jre-alpine。环境变量不存在。明确设置 thr projectId 后,我开始得到:ComputeEngineCredentials 找不到元数据服务器。这可能是因为代码未在 Google Compute Engine 上运行。
    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2020-04-19
    • 2016-03-20
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多