本文档介绍如何将 Java 8 应用重新封装为 JAR
文件,以便在 Java 11/17 运行时环境中运行。
您的应用必须具有一个 Main
类,该类会启动一个 Web 服务器以响应由 PORT
环境变量指定的端口(通常为 8081)上的 HTTP 请求。
例如:
WAR 迁移示例
以下说明演示了如何将 App Engine Java 8 hello-world
应用重新封装为 JAR,以便在 Java 11/17 运行时环境中运行。
该迁移使用 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 文件作为参数传递。WAR
版本必须与pom.xml
文件中列出的版本相同:如需在本地运行应用,请执行以下操作:
封装应用:
mvn clean package
使用 WAR 文件作为参数启动服务器。
例如,您可以通过从
java-docs-samples/appengine-java11/appengine-simple-jetty-main/
文件夹运行以下命令,来启动helloworld-war
示例中的服务器:mvn exec:java -Dexec.args="../flexible/java-11/helloworld-war/target/helloworld-1.war"
在网络浏览器中输入以下地址:
如需使用 Maven 插件部署应用,请运行以下代码:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
将 PROJECT_ID 替换为您的 Google Cloud 项目的 ID。 如果您的
pom.xml
文件已经指定了您的项目 ID,则您无需在运行的命令中添加-Dapp.deploy.projectId
属性。