如果您要迁移到受支持的最新 Java 版本,并且您的应用不使用旧版捆绑服务,您必须将 App Engine Java 8 Web 应用重新封装为可执行的 JAR 文件。
您的应用必须具有一个 Main 类,该类会启动一个 Web 服务器以响应端口 8080 上的 HTTP 请求,该端口可以由 PORT 环境变量指定。
例如:
WAR 迁移示例 (Java 11)
以下说明演示了如何将 App Engine Java 8 hello-world 应用重新封装为 JAR 以便在 Java 11 运行时环境中运行。
该迁移使用 appengine-simple-jetty-main 工件。这为 Main 类提供了一个简单的 Jetty Web 服务器,用来加载 WAR 文件并将您的应用封装成可执行的 JAR 文件:
- 将嵌入式 Jetty 服务器工件克隆到本地机器: - git clone https://github.com/GoogleCloudPlatform/java-docs-samples- 或者,您也可以下载该示例的 zip 文件并将其解压缩。 
- 转到包含示例代码的目录: - cd java-docs-samples/appengine-java11/appengine-simple-jetty-main/
- 在本地安装依赖项: - mvn install
- 将以下代码添加到您的项目 - pom.xml文件中:- appengine-simple-jetty-main依赖项:
- maven-dependency插件: App Engine 将部署位于- ${build.directory}/appengine-staging目录中的文件。通过将- maven-dependency插件添加到您的版本中,App Engine 会将您指定的依赖项安装到正确的文件夹中。
 
- 在 - app.yaml文件中创建一个- entrypoint元素,以调用- appengine-simple-jetty-main对象并将 WAR 文件作为参数传递。如需查看示例,请参阅- helloworld-servlet示例- app.yaml文件:
- 如需在本地运行应用,请执行以下操作: - 封装应用: - mvn clean package
- 使用 WAR 文件作为参数启动服务器。 - 例如,您可以通过从 - java-docs-samples/appengine-java11/appengine-simple-jetty-main/文件夹运行以下命令,来启动- helloworld-servlet示例中的服务器:- mvn exec:java -Dexec.args="../helloworld-java8/target/helloworld.war"
- 在网络浏览器中输入以下地址: 
 
- 要部署应用,请运行以下命令: - gcloud 工具- gcloud app deploy - Maven 插件- mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID - 将 PROJECT_ID 替换为您的 Google Cloud 项目的 ID。如果您的 - pom.xml文件已经指定您的项目 ID,则您无需在运行的命令中添加- -Dapp.deploy.projectId属性。