/ / Cómo corregir un error: se requiere un ID de proyecto para este servicio, pero no se pudo determinar: google-app-engine, google-cloud-datastore, gcloud, gcloud-java

Cómo reparar el error: se requiere una ID de proyecto para este servicio, pero no se pudo determinar: google-app-engine, google-cloud-datastore, gcloud, gcloud-java

Estoy tratando de insertar datos en Google Datastore desde AppEngine y obtengo un error:

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)

Aquí está mi código:

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);

¿Cómo soluciono este error?

Respuestas

1 para la respuesta № 1

¿Está ejecutando AE estándar o AE Flexible?

Asegúrate de tener la App Engine jarra de api en su ruta de clase (directorio WEB-INF / lib).


8 para la respuesta № 2

En mi caso el siguiente código está funcionando:

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

Puse el projectId en el constructor.