Menggunakan Gradle dan Plugin App Engine

Anda dapat menggunakan Gradle, sistem otomatisasi build fleksibel yang deklaratif dan digunakan untuk mengotomatiskan build, pengujian, penayangan, dan deployment. Halaman ini menjelaskan cara menggunakan Gradle dengan project App Engine di lingkungan standar.

Sebelum memulai

Instal dan konfigurasi prasyarat berikut:

Menyiapkan dan memvalidasi project Google Cloud

Anda perlu menyiapkan project Google Cloud dan menginstal gcloud CLI:

  1. Gunakan konsol Google Cloud untuk membuat dan menyiapkan project Google Cloud Anda:

    Buka App Engine

    1. Pilih atau buat project Google Cloud baru.
    2. Ikuti prompt untuk memastikan bahwa aplikasi App Engine ada dan penagihan diaktifkan:
      1. Jika perlu membuat aplikasi App Engine untuk project, Anda akan diminta untuk memilih region tempat Anda ingin aplikasi App Engine berada.
      2. Ikuti prompt untuk membuat akun penagihan baru atau pilih akun yang ada.
    3. Dasbor akan terbuka setelah aplikasi App Engine Anda dibuat dan penagihan diaktifkan di project Anda.
  2. Anda tidak perlu menginstal gcloud CLI karena plugin akan otomatis menginstal SDK saat diperlukan.

Membuat project Gradle baru

Anda dapat membuat project Gradle baru dari awal menggunakan shell. Atau, untuk mencoba plugin, Anda dapat mendownload, menjalankan secara lokal, dan men-deploy project halo dunia.

  1. Buat dan masukkan direktori baru.

  2. Untuk melakukan inisialisasi project baru:

    gradle init --type java-library;
    mkdir -p src/main/webapp/WEB-INF;
    rm src/main/java/Library.java src/test/java/LibraryTest.java
    
  3. Tambahkan kode berikut ke file build.gradle Anda untuk menambahkan tugas Gradle App Engine, repositori Maven, plugin Gradle App Engine, dependensi, dan konfigurasi tugas:

    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. Anda juga perlu menambahkan file berikut ke project menggunakan editor teks atau Integrated Development Environment (IDE):

Lihat File konfigurasi untuk ringkasan project App Engine Java.

Mendownload aplikasi Halo Dunia

  1. Clone repositori aplikasi contoh Halo Dunia ke komputer lokal Anda:

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

    Anda juga dapat mendownload contoh sebagai file ZIP dan mengekstraknya.

  2. Ubah ke direktori yang berisi kode contoh:

    cd java-docs-samples/appengine-java8/helloworld
    

Menguji aplikasi dengan server pengembangan

  1. Untuk mengakses resource Google dari project Anda saat berjalan secara lokal, tetapkan kredensial default aplikasi dengan menjalankan:

    gcloud auth application-default login
    
  2. Ubah ke root direktori aplikasi Anda.

  3. Selama fase pengembangan, Anda dapat menjalankan dan menguji aplikasi kapan saja di server pengembangan dengan memanggil Gradle:

    gradle appengineRun
    

    Atau, Anda dapat menjalankan Gradle tanpa menginstalnya dengan menggunakan wrapper Gradle.

  4. Tunggu hingga server dimulai. Server akan dimulai dengan aplikasi berjalan saat Anda melihat pesan yang mirip dengan ini:

    :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. Lihat aplikasi Anda berjalan di http://127.0.0.1:8080.

Proses debug pada server pengembangan

Untuk men-debug aplikasi yang berjalan secara lokal, tetapkan properti jvmFlags untuk mengaktifkan proses debug di JVM yang mendasarinya, misalnya:

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

Mengaktifkan hot reload aplikasi

Hot Reload adalah kemampuan untuk mengupdate satu atau beberapa class dalam aplikasi yang saat ini berjalan tanpa menghentikan lingkungan. Untuk mengaktifkan hot reload:

  • Anda harus memberi tahu server lokal untuk memindai perubahan:

    appengine {
      run {
        automaticRestart = true
      }
    }
    
  • Saat aplikasi sedang berjalan, jalankan tugas explodeWar untuk menyalin perubahan ke aplikasi yang di-explode secara langsung dan menyebarkan perubahan ke dalam aplikasi yang sedang berjalan.

Men-deploy aplikasi Anda

Untuk men-deploy aplikasi Anda:

gradle appengineDeploy

Tugas appengineDeploy dan semua tugas Gradle lainnya memiliki properti terkait yang dapat Anda gunakan. Untuk mengetahui daftar lengkap tugas dan properti, baca Tugas dan Properti Gradle App Engine.

Menggunakan wrapper Gradle

Gradle menyediakan mekanisme untuk mendownload dan menjalankan versi Gradle yang diperlukan tanpa penginstalan:

Linux/macOS

./gradlew appengineRun

Windows

gradlew.bat appengineRun

Informasi tambahan tentang Gradle dapat ditemukan di Tugas dan Properti Gradle App Engine.

Langkah selanjutnya