使用 Gradle 和 App Engine 外掛程式

Gradle 是開放原始碼的建構自動化工具,專注於彈性和效能。App Engine 提供 Gradle 外掛程式,可用於建構應用程式並將其部署到 App Engine。

事前準備

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

您可以使用殼層從無到有建立新 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 外掛程式、依附元件與工作設定:

    apply plugin: 'java'
    apply plugin: 'war'
    
    buildscript {
        repositories {
            // gretty plugin is in Maven Central
            mavenCentral()
        }
        dependencies {
            classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.8.1'
            classpath 'org.gretty:gretty:4.1.5'
        }
    }
    apply plugin: 'org.gretty'
    apply plugin: 'com.google.cloud.tools.appengine'
    
    repositories {
        mavenCentral()
    }
    
    appengine {
        deploy {   // deploy configuration
            stopPreviousVersion = true  // default - stop the current version
            promote = true              // default - & make this the current version
            projectId = 'GCLOUD_CONFIG'
            version = 'GCLOUD_CONFIG'
        }
    }
    
    sourceSets {
        // In Gradle 8, the default location is app/src/java, which does not match
        // Maven's directory structure.
        main.java.srcDirs = ['src/main/java']
        main.resources.srcDirs = ['src/main/resources', 'src/main/webapp']
        test.java.srcDirs = ['src/test/java']
    }
    
    dependencies {
        implementation 'com.google.appengine:appengine-api-1.0-sdk:2.0.30'
        implementation 'jakarta.servlet:jakarta.servlet-api:6.1.0'
    
        // Test Dependencies
        testImplementation 'com.google.appengine:appengine-testing:2.0.30'
        testImplementation 'com.google.appengine:appengine-api-stubs:2.0.30'
        testImplementation 'com.google.appengine:appengine-tools-sdk:2.0.30'
    
        testImplementation 'com.google.truth:truth:1.1.5'
        testImplementation 'junit:junit:4.13.2'
        testImplementation 'org.mockito:mockito-core:4.11.0'
    }
  5. 您也需要使用文字編輯器或整合式開發環境 (IDE),將下列檔案新增至專案:

如需 Java App Engine 專案的總覽,請參閱「設定開發環境」。

使用開發伺服器測試您的應用程式

  1. 如要在本機執行時透過專案存取 Google 資源,請執行以下指令設定應用程式預設憑證:

    gcloud auth application-default login
    
  2. 變更至應用程式的根目錄。

  3. 在開發階段,您隨時可以叫用 Gradle,在開發伺服器中執行和測試您的應用程式:

    gradle jettyRun
    

    您也可以使用 Gradle 包裝函式,在不安裝 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 工作與屬性一文。

後續步驟