שימוש ב-Gradle ובפלאגין App Engine

Gradle הוא כלי אוטומטי לבנייה בקוד פתוח, שמתמקד בגמישות ובביצועים. ‫App Engine מספק פלאגין Gradle שבו אפשר להשתמש כדי לבנות ולפרוס את האפליקציה ב-App Engine.

לפני שמתחילים

  1. התקנת Java

  2. התקנת Gradle

  3. התקנה של git

  4. אם עדיין לא עשיתם את זה, פועלים לפי השלבים במדריך הזה כדי להוריד את ה-CLI של gcloud, ליצור את הפרויקט Google Cloud ולהפעיל את אפליקציית App Engine.

  5. מתקינים את רכיב app-engine-java של ה-CLI של gcloud:

    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 של סקריפט build: ‏ 2 (ל-Groovy)
      • בוחרים מסגרת בדיקה: 1 (ל-JUnit 4)
      • יצירת build באמצעות ממשקי API חדשים והתנהגות חדשה: לא
    2. יוצרים את התיקייה WEB-INF:

      mkdir -p app/src/main/webapp/WEB-INF
      
    3. יוצרים את התיקייה appengine:

      mkdir -p app/src/main/appengine
      
  3. מסירים את קובצי ה-stub שנוצרו על ידי 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 Wrapper.

  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 Configuration ו-Gretty tasks.

פריסת האפליקציה

כדי לפרוס את האפליקציה:

gradle appengineDeploy

למשימה appengineDeploy ולכל שאר המשימות ב-Gradle יש מאפיינים משויכים שאפשר להשתמש בהם. רשימה מלאה של המשימות והמאפיינים מופיעה במאמר בנושא משימות ומאפיינים של App Engine Gradle.

שימוש ב-Gradle wrapper

‫Gradle מספק מנגנון להורדה ולהרצה של הגרסה הנדרשת של Gradle ללא התקנה:

‫Linux/macOS

  1. עוברים לספרייה של הקוד לדוגמה.

  2. מריצים את gradlew:

    ./gradlew jettyRun
    

Windows

  1. עוברים לספרייה של הקוד לדוגמה.

  2. מריצים את gradlew:

    ./gradlew.bat jettyRun
    

מידע נוסף על Gradle זמין במאמר בנושא משימות ומאפיינים של Gradle ב-App Engine.

המאמרים הבאים