使用 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 專案

您可以使用殼層從無到有建立新 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 的情況下執行 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

視窗

gradlew.bat appengineRun

如需 Gradle 的額外資訊,請參閱 App Engine Gradle 工作與屬性一文。

後續步驟