使用 Apache Maven 和 App Engine 插件(基于 Cloud SDK)

本页面介绍如何使用 Apache Maven(一个软件项目管理和理解工具)管理 App Engine 项目。该工具能够构建用于部署到 App Engine 的 Web 应用归档 (WAR) 文件。 Google 提供了 Maven 3.5 或更高版本支持的插件和 Maven Archetypes。

Maven 会从 App Engine SDK 下载 Java 库。您可以使用 Maven 在本地测试您的应用并将其部署到 App Engine。

前期准备

  1. 使用 Google Cloud Console 创建和设置您的 Cloud 项目:
    转到 App Engine
    1. 选择或创建新的 Cloud 项目。
    2. 如果您需要为项目创建 App Engine 应用,请按照提示选择要放置 App Engine 应用的区域
  2. 如果您没有安装 Java,请下载 Java,然后进行安装和配置。
  3. 在项目的 pom.xml 中设置 Java 编译器标志,以指定 Java 8 字节代码。
    Java 8
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  4. 您必须安装 Maven 3.5 或更高版本。要查看是否已安装 Maven 3.5 或更高版本,请运行:
     mvn -v
  5. 如果您未安装 Maven 3.5 或更高版本:
    1. 从 Maven 网站 下载 Maven 3.5 或更高版本。
    2. 在本地机器上 安装 Maven 3.5 或更高版本。

      注意:Linux 用户可能需要下载 Maven,而不是使用 apt-get install 来安装 Maven 3.5 或更高版本。

  6. 您无需安装 Cloud SDK,因为该插件会在需要时自动安装 SDK。

向现有项目添加 App Engine Maven 插件(可选)

要在现有 Maven 项目中使用 Google App Engine Maven 插件,请将以下代码添加到项目 pom.xml 文件的 plugins 部分:

<plugin>
   <groupId>com.google.cloud.tools</groupId>
   <artifactId>appengine-maven-plugin</artifactId>
   <version>2.2.0</version>
</plugin>

选择 App Engine 原型

通过 Maven 原型,用户可使用涵盖常见场景的模板来创建 Maven 项目。App Engine 利用此 Maven 功能在 Maven Central 中提供一些非常有用的 App Engine 原型。选择适合您应用的 App Engine 原型:

应用类型 软件工件 说明
App Engine 应用 appengine-skeleton-archetype 生成新的空白 App Engine 项目(但包含所需文件和目录),以备您自己的类和资源使用。
App Engine 应用 appengine-standard-archetype 生成用于 App Engine 标准环境的基本 Java 应用。
App Engine 应用 appengine-flexible-archetype 生成用于 App Engine 柔性环境的基本 Java 应用。

使用 Maven 创建新项目

在项目创建期间,Maven 会提示您提供项目的 groupIdartifactIdversionpackage

术语 含义
groupId Maven 中用于跟踪软件工件的命名空间。如果用户在自己的 Maven 项目中使用您的项目,那么他们最终将需要为相关依赖项指定此属性。
artifactId 您的项目在 Maven 中的名称。如果您的项目的使用方需要您为其 Maven 项目提供支持,那么他们还需要指定此属性。
version 您生成项目时需要使用的 Maven 初始版本。最好为 version 添加 -SNAPSHOT 后缀,因为这样可以在 Maven 版本插件中为开发中的版本提供支持。如需了解详情,请参阅关于使用版本插件的 Maven 指南
package 生成期间创建的 Java 软件包。

创建新的 App Engine 应用

以下步骤介绍如何使用 appengine-skeleton-archetype 创建 App Engine 应用。

要使用 App Engine Maven 原型创建 App Engine 应用,请执行以下操作:

  1. 切换到要在其中构建项目的目录。

  2. 调用以下 Maven 命令:

    mvn archetype:generate -Dappengine-version=1.9.59 -Dapplication-id=[YOUR-PROJECT-ID] -Dfilter=com.google.appengine.archetypes:
    

    -Dappengine-version 设置为最新版本的 Java 版 App Engine SDK,并将 application-id 设置为您的 Cloud 项目 ID。

  3. 要创建一个包含所需目录结构和文件的空项目以供您自己的类使用,请提供对应于 com.google.appengine.archetypes:appengine-skeleton-archetype 的编号。

  4. 接受默认值,以便从显示的可用原型版本列表中选择最新版本。

  5. 当系统提示 Define value for property 'groupId' 时,请为您的应用提供所需的命名空间,例如 com.mycompany.myapp

  6. 当系统提示 Define value for property 'artifactId' 时,请提供项目名称;例如 myapp

  7. 当系统提示 Define value for property 'version' 时,接受默认值。

  8. 当系统提示 Define value for property 'package' 时,请提供首选软件包名称(或接受默认值)。所生成的 Java 文件将采用您在此处指定的软件包名称。

  9. 当系统提示您确认选择时,请接受默认值 (Y)。

  10. 等待项目生成过程完成。然后,将目录切换至新的项目目录,例如,myapp/

  11. 调用以下命令来构建项目

        mvn clean package
    
  12. 等待项目构建。项目成功完成后,您将看到如下所示的消息:

        [INFO] --------------------------------------------------
        [INFO] BUILD SUCCESS
        [INFO] --------------------------------------------------
        [INFO] Total time: 1:16.656s
        [INFO] Finished at: 2016-08-04T16:18:24-07:00
        [INFO] Final Memory: 16M/228M
        [INFO] --------------------------------------------------
    
  13. 如果您使用 appengine-skeleton-archetype 工件创建了一个新的空白应用:

    1. 开始为您自己的应用类编写代码之前,请熟悉基本项目布局和所需的项目文件:在创建项目的目录中,您将拥有名为 myapp 的子目录,其中包含 pom.xml 文件,src/main/java 子目录和 src/main/webapp/WEB-INF 子目录:

      Maven 项目布局

      • 将您自己的应用 Java 类添加到 src/main/java/...
      • 使用文件 src/main/webapp/WEB-INF/appengine-web.xml 配置应用
      • 使用文件 src/main/webapp/WEB-INF/web.xml 配置应用部署
    2. 创建您的应用 Java 类,并将其添加到 src/main/java/...。 如需了解详情,请参阅入门指南

    3. 添加您要为应用用户提供的界面。如需了解详情,请参阅添加应用代码和界面

    4. 您用于创建项目的工件已为您完成基本 src/main/webapp/WEB-INF/appengine-web.xml 配置。但是,对于更高级的配置,您可能需要修改此文件。 如需了解详情,请参阅使用 appengine-web.xml 进行配置

    5. 修改文件 src/main/webapp/WEB-INF/web.xml 以将网址映射到应用处理程序,指定身份验证、过滤条件等。如需了解详情,请参阅部署描述符

管理、测试和部署 Maven 项目

编译和构建项目

要构建使用 Maven App Engine 原型创建的应用,请执行以下操作:

  1. 切换到项目的主目录。

  2. 调用 Maven:

    mvn clean package
    
  3. 等待项目构建完成。项目成功完成后,您将看到如下所示的消息:

    BUILD SUCCESS
     Total time: 10.724s
     Finished at: 2016-08-04T16:18:24-07:00
     Final Memory: 24M/213M
    
  4. (可选)按照以下步骤测试应用。

使用开发服务器测试应用

在开发阶段,您可以随时调用 App Engine Maven 插件,在开发服务器上运行和测试您的应用。

要测试 App Engine 应用,请执行以下操作:

  1. 构建应用(如果您尚未执行此操作):

    mvn clean package
    
  2. 将目录切换至您项目的顶级目录(例如,切换至 myapp)并调用 Maven:

    mvn appengine:run
    

    等待服务器启动。当服务器完全启动且您的应用正在运行时,您将会看到如下所示的消息:

    [INFO] GCLOUD: INFO: Module instance default is running at http://localhost:44180/
    [INFO] GCLOUD: Jul 29, 2016 9:23:55 PM com.google.appengine.tools.development.AbstractModule startup
    [INFO] GCLOUD: INFO: The admin console is running at http://localhost:44180/_ah/admin
    [INFO] GCLOUD: Jul 29, 2016 9:23:55 PM com.google.appengine.tools.development.devappserver2.DevAppServer2Impl doStart
    [INFO] GCLOUD: INFO: Dev App Server is now running
    
  3. 使用浏览器访问 http://localhost:8080/ 以访问您的应用。

  4. Control-C 关闭应用和开发服务器。

指定本地测试的端口

当您在本地开发服务器中运行自己的应用时,默认端口为 8080。您可以通过修改 appengine-maven-plugin 的插件条目来更改此默认端口。例如,您可以在应用目录的 pom.xml 文件中指定端口和地址:

<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>2.2.0</version>
     <configuration>
       <devserver.host>0.0.0.0</devserver.host>
       <devserver.port>8181</devserver.port>
     </configuration>
  </plugin>
</plugins>

在该示例中,<devserver.port> 将端口设置为 8181 而不是默认值,地址指定为 0.0.0.0,这表示开发服务器将侦听从本地网络传入的请求。

前缀 devserver 是可选的;您可以改用 <port>8181</port>

在开发服务器上进行调试

要调试本地运行的应用,请在插件配置中设置 jvmFlags,以在底层 JVM 上启用调试功能,例如:

<configuration>
  <jvmFlags>
    <jvmFlag>-Xdebug</jvmFlag>
    <jvmFlag>-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</jvmFlag>
  </jvmFlags>
</configuration>

部署应用

要部署应用,请运行以下命令:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

PROJECT_ID 替换为您的 Cloud 项目 ID。如果您的 pom.xml 文件已经指定了您的项目 ID,则您无需在运行的命令中添加 -Dapp.deploy.projectId 属性。

App Engine Maven 插件中的 appengine:deploy 目标和其他所有目标都具有可供您使用的关联参数。如需查看目标和参数的完整列表,请参阅 App Engine Maven 插件目标和参数

后续步骤