使用 Gradle 和 App Engine 插件

您可以使用 Gradle,这种灵活的声明式构建自动化系统可用于自动构建、测试、发布和部署。本页介绍如何在标准环境中将 Gradle 用于 App Engine 项目。

准备工作

安装并配置以下前提条件:

设置并验证 Google Cloud 项目

您需要设置 Google Cloud 项目并安装 gcloud CLI:

  1. 使用 Google Cloud 控制台创建并设置您的 Google Cloud 项目:

    转到 App Engine

    1. 选择或创建新的 Google Cloud 项目。
    2. 按照提示操作,以确保 App Engine 应用已存在且已启用结算功能:
      1. 如果您需要为项目创建 App Engine 应用,系统会提示您选择希望 App Engine 应用所在的区域
      2. 按照提示创建新的结算账号或选择现有结算账号。
    3. 当您在项目中创建 App Engine 应用并启用结算功能后,信息中心会随即打开。
  2. 您无需安装 gcloud CLI,因为该插件会在需要时自动安装 SDK。

创建新的 Gradle 项目

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

  1. 创建并输入新目录。

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

    gradle init --type java-library;
    mkdir -p src/main/webapp/WEB-INF;
    rm src/main/java/Library.java src/test/java/LibraryTest.java
    
  3. 将以下代码添加到 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' // If a newer version is available, use it
      }
    }
    
    repositories {   // repositories for Jar's you access in your code
      maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed)
      }
      mavenCentral()
      jcenter()
    }
    
    apply plugin: 'java'                              // standard Java tasks
    apply plugin: 'war'                               // standard Web Archive plugin
    apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks
    
    dependencies {
      implementation 'com.google.appengine:appengine-api-1.0-sdk:+'  // Latest App Engine Api's
      providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    
      implementation 'jstl:jstl:1.2'
    
    // Add your dependencies here.
    //  implementation 'com.google.cloud:google-cloud:+'   // Latest Cloud API's http://googlecloudplatform.github.io/google-cloud-java
    
      testImplementation 'junit:junit:4.13.2'
      testImplementation 'com.google.truth:truth:1.1.5'
      testImplementation 'org.mockito:mockito-core:4.11.0'
    
      testImplementation 'com.google.appengine:appengine-testing:+'
      testImplementation 'com.google.appengine:appengine-api-stubs:+'
      testImplementation 'com.google.appengine:appengine-tools-sdk:+'
    }
    
    // Always run unit tests
    appengineDeploy.dependsOn test
    appengineStage.dependsOn test
    
    appengine {  // App Engine tasks configuration
      deploy {   // deploy configuration
        projectId = System.getenv('GOOGLE_CLOUD_PROJECT')
        version = '1'
      }
    }
    
    test {
      useJUnit()
      testLogging.showStandardStreams = true
      beforeTest { descriptor ->
         logger.lifecycle("test: " + descriptor + "  Running")
      }
    
      onOutput { descriptor, event ->
         logger.lifecycle("test: " + descriptor + ": " + event.message )
      }
      afterTest { descriptor, result ->
        logger.lifecycle("test: " + descriptor + ": " + result )
      }
    }
    
    group   = "com.example.appenginej8"        // Generated output GroupId
    version = "1.0-SNAPSHOT"       // Version in generated output
    
    sourceCompatibility = 1.8     // App Engine Flexible uses Java 8
    targetCompatibility = 1.8     // App Engine Flexible uses Java 8
  4. 您还需要使用文本编辑器或集成开发环境 (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/appengine-java8/helloworld
    

使用开发服务器测试应用

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

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

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

    gradle appengineRun
    

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

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

    :compileJava
    :processResources NO-SOURCE
    :classes
    :war
    :explodeWar
    :assemble
    :appengineRun
    2018-06-05 22:50:46.231:INFO::main: Logging initialized @321ms
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: Module instance default is running at http://localhost:8080/
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: The admin console is running at http://localhost:8080/_ah/admin
    Jun 05, 2018 10:50:49 PM com.google.appengine.tools.development.DevAppServerImpl doStart
    INFO: Dev App Server is now running
    
  5. 访问 http://127.0.0.1:8080 查看应用运行。

在开发服务器上进行调试

要调试本地运行的应用,请设置 jvmFlags 属性以在底层 JVM 上启用调试,例如:

    appengine {
      run {
        jvmFlags = ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005']
      }
    }

启用应用的热重载

“热重载”是指在不停止环境的情况下,在目前正在运行的应用中更新一个或多个类。要启用热重载,请执行以下操作:

  • 您必须通知本地服务器扫描更改:

    appengine {
      run {
        automaticRestart = true
      }
    }
    
  • 当您的应用正在运行时,请运行 explodeWar 任务,将更改直接复制到已分解的应用中,并将更改传播到正在运行的应用中。

部署应用

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

gradle appengineDeploy

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

使用 Gradle 封装容器

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

Linux/macOS

./gradlew appengineRun

Windows

gradlew.bat appengineRun

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

后续步骤