在AppEngine上使用谷歌云端点

时间:2017-01-05 14:12:49

标签: java google-app-engine google-cloud-endpoints

我通常在AppEngine(Java)上使用Google Cloud Endpoints,如下所述:

https://cloud.google.com/appengine/docs/java/endpoints/helloendpoints-java-maven

我使用的端点库的依赖关系是:

<plugin>
   <groupId>com.google.appengine</groupId>
   <artifactId>appengine-endpoints</artifactId>
   <version>1.9.48</version>
</plugin>

使用此命令,我可以使用以下命令启动本地开发服务器: mvn clean package appengine:devserver

但是,似乎有一个新版本的云端点。 https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java

新框架可在此处找到

<dependency>
<groupId>com.google.endpoints</groupId>
<artifactId>endpoints-framework</artifactId>
<version>${endpoints.framework.version}</version>
</dependency>

相同的maven命令在这里不起作用。我无法启动本地开发服务器,打开API资源管理器或使用本地数据存储区(所有这些都可能更早)。有人可以指导我如何使用新框架。

此外,前框架是否可能被弃用?

2 个答案:

答案 0 :(得分:6)

部分回答我自己的问题: 我终于可以使用“Echo应用程序”(在https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java中提到)来工作

但我不得不进行2次更改: a)在appengine-web.xml中注释掉该块。即,

<!--
<basic-scaling>
  <max-instances>2</max-instances>
</basic-scaling>
-->

执行此操作后,我收到了另一个错误,“endpoints-api-configuration失败:com.google.api.config.ServiceConfigException:无法获取服务的默认配置版本” 为了解决这个问题:

b)从web.xml注释掉ServiceManagementConfigFilter,即

<!--
    <filter>
      <filter-name>endpoints-api-configuration</filter-name>
      <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
   </filter>
-->
<!--    
<filter-mapping>
    <filter-name>endpoints-api-configuration</filter-name>
    <servlet-name>EndpointsServlet</servlet-name>
</filter-mapping>
-->

在此之后,

  1. 构建:mvn clean package

  2. 在本地运行:appengine-java-sdk / 1.9.44 / appengine-java-sdk / appengine-java-sdk-1.9.44 / bin / dev_appserver.sh / path / to / war / directory < / p>

  3. 如果有人能够更清楚地了解这些变化的含义,以及我们如何让它开箱即用,那就太棒了

答案 1 :(得分:4)

您遇到了一些问题,而且这些问题对配置问题过于敏感:

要解决问题,请按照:https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java

中的说明进行操作
  1. 替换pom.xml中的YOUR_PROJECT_ID时,请使用正确的Google项目ID。它必须是所有工作步骤的有效项目ID。
  2. 替换echo.java中的YOUR-PROJECT-ID时相同
  3. 如果项目ID无效(实际存在于AppEngine中),则后续步骤将不起作用

    1. 执行:mvn exec:java -DGetSwaggerDoc
    2. 执行:gcloud service-management deploy openapi.json
    3. 执行:export ENDPOINTS_SERVICE_NAME=echo-api.endpoints.<your project id>.cloud.goog
    4. 快速入门指南对第5步没有多大帮助。第4步需要以成功消息结束。

      最后,该示例附带了一个Maven插件,该插件似乎不适用于新的端点。 而不是使用:

          <plugin>
              <groupId>com.google.cloud.tools</groupId>
              <artifactId>appengine-maven-plugin</artifactId>
              <version>${appengine.maven.plugin.version}</version>
          </plugin>
      

      使用:

          <plugin>
              <groupId>com.google.appengine</groupId>
              <artifactId>appengine-maven-plugin</artifactId>
              <version>1.9.44</version>
          </plugin>
      

      为什么mvn appengine:devserver不起作用的问题的答案是新插件中不存在devserver目标。 旧的Maven插件允许您执行:mvn appengine:devserver