随着最近宣布支持Servlet 3.1,我无法弄清楚如何修改App Engine Standard环境以在非Maven构建中使用3.1而不是2.5。
似乎无法升级到3.1?
https://cloudplatform.googleblog.com/2017/06/Google-App-Engine-standard-now-supports-Java-8.html
答案 0 :(得分:8)
还附上了跑步程序。
对于非maven用户,您可以使用gradle。
在gradle构建文件中,第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 运行。
在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] -->
希望它会澄清你。
答案 1 :(得分:3)
无论使用何种技术,只要它产生包含javax.servlet-api的有效战争,这些步骤都应该有效:3.1.0:
1)As documented,确保您已将<runtime>java8</runtime>
添加到appengine-web.xml文件
2)将战争解压缩到自己的单独目录
3)使用App Engine SDK for Java bin目录中的appcfg.sh脚本进行部署。它看起来像:
/<some-path>/appengine-java-sdk-1.9.54/bin/appcfg.sh update /<some-path>/exploded-war/
注意:要从我使用过的servlet中验证ServletContext的版本:
ServletContext sc = req.getSession().getServletContext();
resp.getWriter().println("Servlet version = " + sc.getMajorVersion() + "." + sc.getMinorVersion());