将 App Engine servlet-api-2.5 升级到 servlet-api-3.1?

Posted

技术标签:

【中文标题】将 App Engine servlet-api-2.5 升级到 servlet-api-3.1?【英文标题】:Upgrade App Engine servlet-api-2.5 to servlet-api-3.1? 【发布时间】:2017-12-03 16:34:59 【问题描述】:

随着最近宣布支持 Servlet 3.1,我无法弄清楚如何修改 App Engine 标准环境以在非 Maven 构建中使用 3.1 而不是 2.5。

好像没有办法升级到3.1了?

https://cloudplatform.googleblog.com/2017/06/Google-App-Engine-standard-now-supports-Java-8.html

【问题讨论】:

您能发布您的 gradle 构建文件吗? 【参考方案1】:

这是一个此处给出的完整示例:https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/helloworld

附上运行程序。

对于 Gradle 用户:

对于非maven用户,可以使用gradle。

在 gradle build 文件中,第 39 行表示:https://github.com/GoogleCloudPlatform/getting-started-java/blob/master/appengine-standard-java8/helloworld/build.gradle#L39

providedCompile 'javax.servlet:javax.servlet-api:3.1.0'

在本地运行:

gradle appengineRun

如果你没有安装 gradle,你可以使用 ./gradlew appengineRun 运行。

使用访问:http://localhost:8080/

对于 Maven 用户

在 pom.xml 中,第 62 到 70 行表示它正在使用 servlet 版本 3.1.0:https://github.com/GoogleCloudPlatform/getting-started-java/blob/master/appengine-standard-java8/helloworld/pom.xml#L66

<!-- [START servlet] -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <type>jar</type>
  <scope>provided</scope>
</dependency>
<!-- [END servlet] -->

希望它能澄清你。

【讨论】:

@MarCialR 我已经为 maven 和非 maven 用户提到过,以便它可以帮助其他遇到 maven 相同错误的人。 这个答案特别有用,因为它解释了我也需要 gradle。谢谢。 直到 github.com/cloudendpoints/endpoints-java/pull/129 在 2.0.12 发布之前,这对我的 Cloud Endpoints 项目不起作用。【参考方案2】:

无论使用什么技术,这些步骤都应该有效,只要它产生一个包含 javax.servlet-api:3.1.0 的有效战争:

1) As documented,确保您已将 &lt;runtime&gt;java8&lt;/runtime&gt; 添加到您的 appengine-web.xml 文件中

2) 将战争解压到自己的单独目录中

3) 使用位于App Engine SDK for Java bin 目录中的 appcfg.sh 脚本进行部署。它看起来像:

/&lt;some-path&gt;/appengine-java-sdk-1.9.54/bin/appcfg.sh update /&lt;some-path&gt;/exploded-war/

注意:要从我使用过的 servlet 中验证 ServletContext 的版本:

ServletContext sc = req.getSession().getServletContext();
resp.getWriter().println("Servlet version = " + sc.getMajorVersion() + "." + sc.getMinorVersion());

【讨论】:

以上是关于将 App Engine servlet-api-2.5 升级到 servlet-api-3.1?的主要内容,如果未能解决你的问题,请参考以下文章

将App Engine URL分派给Compute Engine实例

将 Meteor 部署到 Google App Engine 2017

python Google App Engine:将CSV导入数据存储区

将 PHP 应用程序部署到 App Engine 时出错

将参数传递给 app.yaml Google App Engine 中的 php

python 将Google App Engine SDK添加到Python virtualenv