使用 Gradle 和 App Engine 插件

Gradle 是一种侧重于灵活性和性能的开源构建自动化工具。App Engine 提供了一个 Gradle 插件,您可以使用该插件构建应用并将其部署到 App Engine。 此代码示例演示了如何配置 build.gradle 文件以添加 App Engine Gradle 任务、Maven 制品库、App Engine Gradle 插件和依赖项。

准备工作

  1. 安装 Java

  2. 安装 Gradle

  3. 安装 git

  4. 请按照本指南中的步骤下载 gcloud CLI,创建 Google Cloud 项目并初始化 App Engine 应用(如果您尚未执行这些操作)。

  5. 安装 gcloud CLI app-engine-java 组件:

    gcloud components install app-engine-java
    

创建新的 Gradle 项目

您可以使用 shell 从头开始创建新的 Gradle 项目。或者,如果要试用此插件,您还可以下载 hello world 项目,在本地运行并完成部署。

如需创建新项目,请执行以下操作:

  1. 创建一个新目录,并导航到此目录。

  2. 如需初始化一个新项目,请执行以下操作:

    1. 运行 gradle init

      gradle init --type java-application
      

      您需要回答以下问题:

      • 输入目标 Java 版本(最小值:7,默认值:21):21
      • 选择应用结构:1 表示单个应用项目
      • 选择构建脚本 DSL:2(适用于 Groovy)
      • 选择测试框架:1(适用于 JUnit 4)
      • 使用新的 API 和行为生成构建:否
    2. 创建 WEB-INF 文件夹:

      mkdir -p app/src/main/webapp/WEB-INF
      
    3. 创建 appengine 文件夹:

      mkdir -p app/src/main/appengine
      
  3. 移除 gradle init 生成的存根文件:

    rm ./app/src/main/java/org/example/App.java ./app/src/test/java/org/example/AppTest.java
    
  4. 将以下代码添加到 app/build.gradle 文件中,以添加 App Engine Gradle 任务、Maven 代码库、App Engine Gradle 插件、依赖项和任务配置:

    buildscript {      // Configuration for building
      repositories {
        jcenter()      // Bintray's repository - a fast Maven Central mirror & more
        mavenCentral()
      }
      dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.5.0'
        classpath 'org.akhikhl.gretty:gretty:+'
      }
    }
    
    repositories {   // repositories for Jar's you access in your code
      jcenter()
      mavenCentral()
    }
    
    apply plugin: 'java'
    apply plugin: 'war'
    apply plugin: 'org.akhikhl.gretty'
    apply plugin: 'com.google.cloud.tools.appengine'
    
    dependencies {
      providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
      providedCompile 'com.google.appengine:appengine:+'
    // Add your dependencies here.
    
    }
    
    gretty {
        servletContainer = 'jetty9'  // What App Engine Flexible uses
    }
    
      appengine {
        deploy {   // deploy configuration
          stopPreviousVersion = true  // default - stop the current version
          promote = true              // default - & make this the current version
        }
      }
    
    group = 'com.example.appengine'   // Generated output GroupId
    version = '1.0-SNAPSHOT'          // Version in generated output
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
  5. 您还需要使用文本编辑器或集成开发环境 (IDE) 将以下文件添加到您的项目:

如需大致了解 Java App Engine 项目,请参阅设置开发环境

使用开发服务器测试应用

  1. 在本地运行时,如果要从项目访问 Google 资源,请运行以下命令,以设置应用默认凭据:

    gcloud auth application-default login
    
  2. 切换到应用目录的根目录。

  3. 在开发阶段,您可以调用 Gradle 插件,在开发服务器上随时运行和测试您的应用:

    gradle jettyRun
    

    或者,您可以使用 Gradle 封装容器,这样无需安装就能运行 Gradle。

  4. 等待服务器启动。当您看到如下所示的消息时,表示服务器已启动且您的应用正在运行:

    :prepareInplaceWebAppFolder
    :createInplaceWebAppFolder
    :compileJava
    :processResources UP-TO-DATE
    :classes
    :prepareInplaceWebAppClasses
    :prepareInplaceWebApp
    :jettyRun
    17:40:05 INFO  Jetty 9.2.15.v20160210 started and listening on port 8080
    17:40:05 INFO   runs at:
    17:40:05 INFO    http://localhost:8080/
    
  5. 访问 http://localhost:8080 查看应用运行情况。

如需详细了解 Gretty 插件,请参阅 Gretty 配置Gretty 任务

部署应用

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

gradle appengineDeploy

appengineDeploy 任务和所有其他 Gradle 任务具有您可以使用的关联属性。如需查看任务和属性的完整列表,请参阅 App Engine Gradle 任务和属性

使用 Gradle 封装容器

Gradle 提供了一种无需安装,即可下载并运行所需的 Gradle 版本的机制:

Linux/macOS

  1. 切换到示例代码目录。

  2. 运行 gradlew:

    ./gradlew jettyRun
    

Windows

  1. 切换到示例代码目录。

  2. 运行 gradlew:

    ./gradlew.bat jettyRun
    

如需详细了解 Gradle,请参阅 App Engine Gradle 任务和属性

后续步骤