App Engine Maven 插件(基于 gcloud CLI)目标和参数

在您的项目中添加基于 gcloud CLI 的 App Engine Maven 插件后,您就可以使用以下 App Engine 特定的 Maven 目标了:

目标 说明
appengine:cloudSdkLogin 设置帐号的全局 gcloud CLI 状态。
appengine:deploy 暂存应用并将其部署到 App Engine。
appengine:deployAll 暂存应用及其所有的有效 yaml 配置,同时将其部署到 App Engine。
appengine:deployCron 暂存 cron.yaml 配置文件并将其部署到 App Engine。
appengine:deployDispatch 暂存 dispatch.yaml 配置文件并将其部署到 App Engine。
appengine:deployDos 暂存 dos.yaml 配置文件并将其部署到 App Engine。
appengine:deployIndex 暂存 index.yaml 配置文件并将其部署到 App Engine。
appengine:deployQueue 暂存 queue.yaml 配置文件并将其部署到 App Engine。
appengine:help 显示 App Engine Maven 插件的帮助信息。
appengine:run 运行 App Engine 开发服务器。服务器运行时,会持续检查以确定 appengine-web.xml 是否已更改。如果已更改,则服务器会重新加载应用。您无需因 appengine-web.xml 的更改而停止和重启应用。
appengine:stage 生成用于部署的应用目录。
appengine:start 以异步方式启动 App Engine 开发服务器,然后返回命令行。 当此目标运行时,行为与 run 目标完全相同,但以下情况除外:Maven 继续处理目标,并在服务器启动并运行后退出。
appengine:stop 停止正在运行的 App Engine 网络开发服务器。

如需详细了解如何设置和使用 Maven,请参阅使用 Maven

目标参数

每个目标都包含您可以使用的相关参数。您可以在 pom.xml 中或通过命令行指定这些设置。

要在 pom.xml 中配置这些设置,请在 <configuration> 部分添加参数名称。

以下示例演示了如何拆分 JAR 文件、停止以前运行的版本,以及指定 gcloud CLI 路径:

<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>2.7.0</version>
     <configuration>
       <stage.enableJarSplitting>true</stage.enableJarSplitting>
       <deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>
       <cloudSdkHome>/usr/foo/path/to/cloudsdk</cloudSdkHome>
     </configuration>
  </plugin>
</plugins>

或者,要通过命令行配置这些设置,请遵循 -D[USER_PROPERTY]=[PARAMETER_VALUE] 模式。

以下示例演示了如何指定用于暂存应用的目录:

mvn appengine:stage -Dapp.stage.stagingDirectory=[YOUR_STAGING_DIRECTORY]

如需可用于每个目标的参数列表,请参阅以下部分。

如果要跳过所有 appengine:goal 执行,请将 skip 参数设置为 true

appengine:deploy

暂存应用并将其部署到 App Engine。

您可以使用以下参数,其中部分参数对应于 gcloud app deploy 命令行标志

参数 说明 插件配置 命令行配置
appEngineDirectory .yaml 配置文件(Cron、索引等)的位置,用于配置特定部署(appengineDeployCron 等)。对于标准应用,您的 .xml 配置文件在暂存到 .yaml 时会进行转换,并放置在 target/appengine-staging/WEB-INF/appengine-generated 中。 deploy.appEngineDirectory app.deploy.appEngineDirectory
bucket 用于暂存与部署关联的文件的 Cloud Storage 存储分区。如果未指定此参数,则使用应用的默认存储分区。 deploy.bucket app.deploy.bucket
cloudSdkHome 用于配置 gcloud CLI 位置的可选参数。如果未指定此属性,则该插件会自动下载 gcloud CLI。 cloudSdkHome cloudSdkHome
cloudSdkVersion 用于指定所需 gcloud CLI 版本的可选参数。 cloudSdkVersion cloudSdkVersion
compileEncoding 编译 JSP 时使用的字符编码。仅适用于 App Engine 标准环境。 stage.compileEncoding app.stage.compileEncoding
deleteJsps 编译后删除 JSP 源文件。仅适用于 App Engine 标准环境。 stage.deleteJsps app.stage.deleteJsps
disableJarJsps 禁止添加通过 JSP 生成的类。 仅适用于 App Engine 标准环境。 stage.disableJarJsps app.stage.disableJarJsps
dockerBuild 执行托管 (remote) 或本地 (local) Docker 构建。要执行本地构建,必须正确配置本地 docker 环境。默认情况下,执行托管构建。 deploy.dockerBuild app.deploy.dockerBuild
dockerfile dockerfile 的位置,用于在柔性环境中运行的 App Engine 标准环境应用。 仅适用于 App Engine 标准环境。 stage.dockerfile app.stage.dockerfile
enableJarClasses WEB-INF/classes 内容压缩为 jar 文件。仅适用于 App Engine 标准环境。 stage.enableJarClasses app.stage.enableJarClasses
enableJarSplitting 将大于 10 MB 的 JAR 文件拆分为多个较小的片段。仅适用于 App Engine 标准环境。 stage.enableJarSplitting app.stage.enableJarSplitting
enableQuickstart 使用 Jetty 快速启动模块处理 servlet 注释。仅适用于 App Engine 标准环境。 stage.enableQuickstart app.stage.enableQuickstart
force 强制部署,以替换此版本以前的任何正在进行的部署。 deploy.force app.deploy.force
imageUrl 使用特定的 Docker 映像进行部署。Docker 网址必须来自有效的 Google Container Registry 主机名之一。 deploy.imageUrl app.deploy.imageUrl
jarSplittingExcludes 从所有 JAR 文件中排除与英文逗号分隔的 SUFFIXES 列表匹配的文件。 仅适用于 App Engine 标准环境。 stage.jarSplittingExcludes app.stage.jarSplittingExcludes
projectId 用于此调用的 Google Cloud Platform 项目名称。 您必须指定 projectId,或者您可以将 GCLOUD_CONFIG 设置为使用 gcloud 配置状态下的项目集。 deploy.projectId app.deploy.projectId
promote 提升已部署的版本以接收所有流量。默认值为 True deploy.promote app.deploy.promote
server 要连接的 App Engine 服务器。您通常不需要更改此值。 deploy.server app.deploy.server
sourceDirectory 必需。已编译的 Web 应用文件或分离型 WAR 的位置,会用作要暂存的内容的源位置。仅适用于 App Engine 标准环境。默认值为 ${project.build.directory}/${project.build.finalName} stage.sourceDirectory app.stage.sourceDirectory
stagingDirectory 必需。要暂存应用的目录。默认值为 ${project.build.directory}/appengine-staging stage.stagingDirectory app.stage.stagingDirectory
stopPreviousVersion 在部署接收所有流量的新版本时,停止以前运行的版本。 deploy.stopPreviousVersion app.deploy.stopPreviousVersion
version 将由此部署创建或替换的应用版本。如果您未指定版本,系统会为您生成一个版本。 deploy.version app.deploy.version

appengine:help

显示 App Engine Maven 插件的帮助信息。

要显示参数详细信息,请调用:

mvn appengine:help -Ddetail=true -Dgoal=[GOAL_NAME]

您可以使用以下参数:

参数 说明 用户属性
detail 如果为 true,则显示每个目标的所有可设置属性。默认值为 False detail
goal 要显示其帮助信息的目标的名称。如果未指定,将显示所有目标。 goal
indentSize 每个缩进级别的空格数。应为正数。 默认为 2 indentSize
lineLength 显示行的长度上限。应为正数。默认值为 80 lineLength

appengine:run

运行 App Engine 开发网络服务器。服务器运行时,会持续检查以确定 appengine-web.xml 是否已更改。如果已更改,则服务器会重新加载应用。也就是说,您无需因 appengine-web.xml 发生更改而停止和重启您的应用。

您可以使用以下参数,其中一些参数对应于本地开发服务器命令行标志

属性 说明 插件配置 命令行配置
automaticRestart 更改 Web 应用文件(资源或类文件)时自动重启实例。如需配置 Maven 以将已编译的类文件放置在 Web 应用的正确目录中,您必须更改 Maven outputDirectory 设置:

<build>
  <outputDirectory>
    target/${project.artifactId}-${project.version}/WEB-INF/classes
  </outputDirectory>
  ...
<plugins>
...
devserver.automaticRestart app.devserver.automaticRestart
environment 要发送到本地开发服务器的环境变量的映射。 示例:

<environment>
  <key1>value1</key1>
  <key2>value2</key2>
</environment>
      
devserver.environment app.devserver.environment
jvmFlags 启动应用实例时要传递至 java 命令的其他参数。可以多次指定此参数。示例:

<jvmFlags>
  <jvmFlag>-Xmx1024m</jvmFlag>
  <jvmFlag>-Xms256m</jvmFlag>
</jvmFlags>
      
devserver.jvmFlags app.devserver.jvmFlags
host 应用服务应绑定的主机名。默认值为 localhost devserver.host app.devserver.host
port 应用服务应至少绑定的端口。默认值为 8080 devserver.port app.devserver.port
serverVersion 要启动的服务器版本,选项包括“1”和“2-alpha”。默认值为“1”。 devserver.serverVersion app.devserver.serverVersion
services 必需。表示一个目录的路径,其中包含 WEB-INF/web.xml 所在的目录。默认值为 build/exploded-app devserver.services app.devserver.services

appengine:stage

生成用于部署的应用目录。系统会在 appengine:deploy 目标之前自动调用暂存阶段。此阶段负责:

  • 将 Web 应用 JSP 编译为 Servlet 类
  • 解析所有已添加注释的 Servlet 并生成 Jetty 快速入门 web.xml(仅当 web.xml 配置为使用 3.1 版 Servlet 规范时适用)。
  • (可选)将已编译的类放入 jar 中
  • 从以下文件生成完整的 app.yamlappengine-web.xmlweb.xml、已添加注释的 Servlet
  • 将 Web 应用的所有静态文件(html、css、js、图片等)复制到 __static__/ 目录,然后将该目录部署为 app.yaml 中配置的静态文件。

暂存目录可用于检查正在部署的内容,并且可以按原样用于 gcloud app deploy 命令。

您可以使用以下参数:

参数 说明 插件配置 命令行配置
cloudSdkHome 用于配置 gcloud CLI 位置的可选参数。如果未指定此属性,则该插件会自动下载 gcloud CLI。 cloudSdkHome cloudSdkHome
cloudSdkVersion 用于指定所需 gcloud CLI 版本的可选参数。 cloudSdkVersion cloudSdkVersion
compileEncoding 编译 JSP 时使用的字符编码。仅适用于 App Engine 标准环境。 stage.compileEncoding app.stage.compileEncoding
deleteJsps 编译后删除 JSP 源文件。仅适用于 App Engine 标准环境。 stage.deleteJsps app.stage.deleteJsps
dockerfile dockerfile 的位置,用于在柔性环境中运行的 App Engine 标准环境应用。 仅适用于 App Engine 标准环境。 stage.dockerfile app.stage.dockerfile
enableJarClasses WEB-INF/classes 内容压缩为 jar 文件。仅适用于 App Engine 标准环境。 stage.enableJarClasses app.stage.enableJarClasses
enableJarSplitting 将大于 10 MB 的 JAR 文件拆分为多个较小的片段。仅适用于 App Engine 标准环境。 stage.enableJarSplitting app.stage.enableJarSplitting
enableQuickstart 使用 Jetty 快速启动模块处理 servlet 注释。仅适用于 App Engine 标准环境。 stage.enableQuickstart app.stage.enableQuickstart
jarSplittingExcludes 从所有 JAR 文件中排除与英文逗号分隔的 SUFFIXES 列表匹配的文件。 仅适用于 App Engine 标准环境。 stage.jarSplittingExcludes app.stage.jarSplittingExcludes
sourceDirectory 必需。已编译的 Web 应用文件或分离型 WAR 的位置,会用作要暂存的内容的源位置。仅适用于 App Engine 标准环境。默认值为 ${project.build.directory}/${project.build.finalName} stage.sourceDirectory app.stage.sourceDirectory
stagingDirectory 必需。要暂存应用的目录。默认为 ${project.build.directory}/appengine-staging stage.stagingDirectory app.stage.stagingDirectory

appengine:start

以异步方式启动 App Engine 开发网络服务器,然后返回命令行。当此目标运行时,行为与 run 目标完全相同,但以下情况除外:Maven 继续处理目标,并在服务器启动并运行后退出。

您可以使用以下参数:

属性 说明 插件配置 命令行配置
environment 要发送到本地开发服务器的环境变量的映射。 示例:

<environment>
  <key1>value1</key1>
  <key2>value2</key2>
</environment>
      
devserver.environment app.devserver.environment
jvmFlags 启动应用实例时要传递至 java 命令的其他参数。可以多次指定此参数。示例:

<jvmFlags>
  <jvmFlag>-Xmx1024m</jvmFlag>
  <jvmFlag>-Xms256m</jvmFlag>
</jvmFlags>
      
devserver.jvmFlags app.devserver.jvmFlags
host 应用服务应绑定的主机名。默认值为 localhost devserver.host app.devserver.host
port 应用服务应至少绑定的端口。默认值为 8080 devserver.port app.devserver.port
serverVersion 要启动的服务器版本,选项包括“1”和“2-alpha”。默认值为“1”。 devserver.serverVersion app.devserver.serverVersion
services 必需。表示一个目录的路径,其中包含 WEB-INF/web.xml 所在的目录。默认值为 build/exploded-app devserver.services app.devserver.services
startSuccessTimeout 等待开发应用服务器在后台启动(使用 appengineStart 时)的时间(以秒为单位)。 devserver.startSuccessTimeout app.devserver.startSuccessTimeout

appengine:stop

停止正在运行的 App Engine 网络开发服务器。

您可以使用以下参数:

参数 说明 插件配置 命令行配置
host 管理服务器应绑定的主机名。默认为 localhost devserver.adminHost app.devserver.adminHost
port 管理服务器应绑定的端口。默认值为 8000 devserver.adminPort app.devserver.adminPort
cloudSdkHome 用于配置 gcloud CLI 位置的可选参数。如果未指定此属性,则该插件会自动下载 gcloud CLI。 cloudSdkHome cloudSdkHome

排查上传错误的问题

如果使用 deploy 目标,您的部署尝试可能会失败,并显示类似如下的消息:404 Not Found This application does not exist (app_id=u'your-app-ID')。如果您有多个 Google 帐号,并且在使用错误的帐号执行更新,则会出现这种错误。

要解决此问题,请尝试使用 gcloud auth login 更改已获授权的用户。