2

我正在開發一個appengine項目並使用Google Datastore存儲我的數據。我想調試它,但我仍然有例外java.lang.IllegalArgumentException: projectId must match the following pattern: ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99})調試Google數據存儲:IllegalArgumentException:projectId必須匹配以下模式

我可以調試我的appengine項目,我可以部署它並將數據存儲在Google Datastore correclty中。

要允許調試,我按照數據存儲模擬器的指令:

https://cloud.google.com/datastore/docs/tools/datastore-emulator

我已經安裝了谷歌雲SDK,我開始它correcty使用我的項目ID的默認值(和我有也嘗試通過命令行設置我自己的項目ID)。

這是我在gcloud正在執行命令:

gcloud測試模擬器的數據存儲開始--project =「我的項目名稱」

警告:[C重用現有的數據: \ gcloud \模擬器\數據存儲區。 執行:cmd/c C:\ google-cloud-sdk \ platform \ cloud-datastore-emulator \ cloud_datastore_emulator.cmd start --host = localhost --port = 8806 --store_on_disk = True --consistency = 0.9 --allow_remote_shutdown C:\ gcloud \ emulators \ datastore [datastore] nov 27,2016 5:08:17 PM com.google.cloud.datastore.emulator.CloudDatastore $ FakeDatastoreAction $ 7 apply [datastore] INFORMACI?N:提供 - -allow_remote_shutdown至 啓動命令,不再需要。 [數據存儲] 2016年11月27日 下午5點08分17秒 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub [數據存儲] INFORMACI N:?本地數據存儲初始化:[數據存儲]
類型:高複製[數據存儲]存儲: C:\ gcloud \ emulators \ datastore \ WEB-INF \ appengine生成的\ local_db.bin [datastore] nov 27,2016 5:08:17 PM io.grpc.internal.ManagedChannelImpl [datastore] INFORMACI N:? [ManagedChannelImpl @ 5f71c76a]建立與目標本地主機:8806 [數據存儲] 2016年11月27日下午5點08分17秒 com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub負載 [數據存儲] INFORMACI ?N:後臺商店, C:\ gcloud \ emulators \ datastore \ WEB-INF \ appengine-generated \ local_db.bin, 不存在。它將被創建。 [datastore] nov 27,2016 5:08:17 PM io.gapi.emulators.netty.NettyUtil applyJava7LongHostnameWorkaround [datastore] INFORMACI?N:無法應用Java 7長主機名 解決方法。 [數據存儲] API端點:http://localhost:8806 [數據存儲]如果您使用的是支持的 DATASTORE_EMULATOR_HOST環境變量庫,運行:[數據存儲] [數據存儲]出口DATASTORE_EMULATOR_HOST =本地主機:8806 [數據存儲] [數據存儲]開發應用服務器現在正在運行。 [數據存儲]

這是堆棧跟蹤,當我嘗試使用它:

java.lang.IllegalArgumentException異常:專案編號必須在下列 模式相匹配: (即[az \ d - ] { 1100}〜)([AZ \ d] [AZ \ d - ] {0,99} :)?([az \ d] [az \ d - ] {0,99}) at com.google.common.base.Preconditions.checkArgument(Preconditions.java:122) at com.google.cloud.datastore。 Validator.validateDatabase(Validator.java:42) at com.google.cloud.datastore.BaseKey $ Builder。(BaseKey.java:58) at com.google.cloud.datastore.KeyFactory。(KeyFactory.java:35) 在 com.google.cloud.datastore.DatastoreHelper.newKeyFactory(DatastoreHelper.java:59) 在 com.google.cloud.datastore.DatastoreImpl.newKeyFactory(DatastoreImpl.java:371) 在 com.myproject.api .CronServlet.saveToDataStore(CronServlet.java:187) at com.myproject.api.CronServlet.d oGet(CronServlet.java:105) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.mortbay。 jetty.servlet.ServletHolder.handle在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166) 在 com.google.appengine.api.socket(ServletHolder.java:511) 。 dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.ResponseRewriterFilter。 doFilter(ResponseRewriterFilter.java:128) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter在 org.mortbay在 com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)(ServletHandler.java:1157) .jetty.servlet.ServletHandler $ CachedChain.doFilter在 org.mortbay.jetty在 com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)(ServletHandler.java:1157) .servlet.ServletHandler $ CachedChain.doFilter在 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50)(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter在 org.mortbay在 com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)(ServletHandler.java:1157) .jetty.servlet.ServletHandler $ CachedChain.doFilter在 com.google.appengine.tools在 com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)(ServletHandler.java:1157) .development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter在 org.mortbay.jetty在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)(ServletHandler.java:1157) .security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler中的.java:765) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext。的java:98) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:511) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在org.mortbay.jetty.Server.handle(Server.java:326)在 org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) 在 org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923) 在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)在 組織。 mortbay.jetty.HttpParser.parseAvailable(H ttpParser.java:212)處 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)在 org.mortbay .thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)

編輯:代碼(我didn't包括因爲我覺得這個問題是不是在代碼中,我部署和它完美的作品)。唯一的例外是在提出「datastore.newKeyFactory()」

Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); 
Key taskKey = datastore.newKeyFactory().setKind(ENTITY_TYPE_MEDIDAS). 
    newKey(Calendar.getInstance(TimeZone.getTimeZone("CET")).getTimeInMillis()); 
Entity.Builder task = Entity.newBuilder(taskKey) 
     .set(PROPERTY_COMPUESTO, DATA_COMPUESTO) 
     .set(PROPERTY_AVISO,DATA_AVISO); 
Entity entity = task.build(); 
datastore.put(entity); 
+0

請張貼代碼。 –

+0

好像你在你的項目ID中有非法字符。你可以發佈它看起來像什麼格式嗎? – atimothee

+0

添加了代碼,但它在部署時起作用。項目ID的格式是「某事」,它與正則表達式匹配。我認爲我的項目沒有在任何地方找到項目ID。 –

回答

1

我曾在我的項目的問題,我用兩個com.google.appengine.api.datastorecom.google.cloud.datastore

實際上,問題只在依賴於第二個庫的方法中,所以我從我的項目中刪除了,現在我可以在本地運行我的數據存儲。

也許有人認爲此信息有用。如果您想使用com.google.cloud.datastore,你可以關注@Sai Pullabhotla的回答。

另一方面,如果您使用com.google.appengine.api.datastore,則不需要啓動gcloud工具。你只需要使用appengine的數據存儲。

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
3

,如果你正在尋找一個例子給連接到數據存儲仿真器(發展),或在谷歌雲平臺實時數據存儲目前尚不清楚。看起來你的主要目標是從一個IDE中調試你的代碼,你可以這樣做。

用於連接到數據存儲模擬器 - 看到下面的帖子:

Google Datastore Emulator using Java (Not using GAE)

用於連接到數據儲存GCP -

如果您還沒有運行glcoud init命令,運行它,並按照屏幕上的說明來設置默認項目和授權憑證。然後你可以使用下面的代碼來訪問數據存儲實:

Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); 

其他選項是設置使用DatastoreOptions.Builder你的代碼中的項目編號和驗證憑證。您需要從Google雲端控制檯獲取/下載JSON憑證。

請參見下面的鏈接,瞭解更多信息/示例代碼:

https://github.com/GoogleCloudPlatform/google-cloud-java#specifying-a-project-id

https://github.com/GoogleCloudPlatform/google-cloud-java#authentication

+0

謝謝你的回答。這個答案對很多人很有用,但是我已經爲使用appengine Datastore的人添加了我自己的答案,以便他們可以選擇他們自己的答案。 –

+0

我認爲這是正確的道路。因爲拋出無用的錯誤而在Google上感到羞恥。它應該是「未認證」或什麼的。 – Robert