使用 Gradle 和 App Engine 插件

Gradle 是一种侧重于灵活性和性能的开源构建自动化工具。App Engine 提供了一个 Gradle 插件,您可以使用该插件构建应用并将其部署到 App Engine。本指南中的代码示例使用 Gradle 8 版。

此代码示例演示了如何配置 build.gradle 文件以添加 App Engine Gradle 任务、Maven 制品库、App Engine Gradle 插件和 Java 8 依赖项。对于 Java 11 版及更高版本,请参阅 Java 运行时,详细了解如何使用新版本。

准备工作

  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 项目,请参阅设置开发环境

下载 Hello World 应用

  1. 将 Hello World 示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 转到包含示例代码的目录:

    cd java-docs-samples/flexible/java-8/helloworld
    

使用开发服务器测试应用

  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 任务和属性

后续步骤