זמן הריצה של Java

סביבת זמן הריצה של Java היא מחסנית התוכנה שאחראית להתקנת קוד האפליקציה והתלות שלה, ולאחר מכן להרצת האפליקציה בסביבה הגמישה.

גרסאות Java

‫Java 25 משתמשת ב-buildpacks. בעזרת buildpacks אפשר ליצור ולהגדיר קונטיינרים שאפשר לפרוס ב- Google Cloud.

הרשימה המלאה של גרסאות Java הנתמכות וגרסאות Ubuntu התואמות שלהן זמינה בלוח הזמנים לתמיכה בזמן ריצה.

כדי להשתמש בגרסת Java נתמכת, צריך:

  • מתקינים את גרסה 420.0.0 ואילך של gcloud CLI. אפשר לעדכן את כלי ה-CLI על ידי הרצת הפקודה gcloud components update. כדי לראות את הגרסה המותקנת, אפשר להריץ את הפקודה gcloud version.

  • כדי לפרוס באמצעות Maven, צריך להוסיף את App Engine Maven plugin לקובץ pom.xml:

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>2.8.1</version>
    </plugin>

    אפשרויות אחרות לפריסה כוללות את הפקודה gcloud app deploy או את App Engine Gradle plugin.

  • כדי לציין מערכת הפעלה, צריך לכלול את ההגדרות runtime_config ו-operating_system בקובץ app.yaml.

  • אפשר גם לציין גרסת זמן ריצה על ידי הוספת ההגדרה runtime_version לקובץ app.yaml. כברירת מחדל, נעשה שימוש בגרסת Java העדכנית ביותר אם לא מציינים את ההגדרה runtime_version.

    דוגמאות

    • כדי לציין Java 25 ב-Ubuntu 24:

      runtime: java
      env: flex
      
      runtime_config:
          operating_system: "ubuntu24"
          runtime_version: "25"
      
    • כדי לציין את הגרסה העדכנית הנתמכת של Java ב-Ubuntu 24:

        runtime: java
        env: flex
      
        runtime_config:
            operating_system: "ubuntu24"
      

גרסאות קודמות של זמן הריצה

ב-Java 8, מציינים את ההגדרות runtime_config ו-jdk בקובץ app.yaml.

‫Java 8 תומכת ב:

  • ‫Eclipse Jetty 9 runtime ופועל Jetty 9 באמצעות Servlet 3.1.

  • קוד השרת שלכם שמקשיב ביציאה 8080 כחלק מהאפליקציה. התכונה הזו מאפשרת לכם להשתמש במסגרות מיקרו-שירות כמו SparkJava ו-Spring-Boot.

דוגמאות

  • ציון גרסה 9 של Jetty (ברירת מחדל / אופציונלי):

      runtime_config:
        jdk: openjdk8
        server: jetty9
    
  • ציון גרסה 8 של Java:

      runtime_config:
        jdk: openjdk8
    
  • דוגמה של app.yaml ל-Java 8:

    runtime: java
    env: flex
    
    handlers:
    - url: /.*
      script: this field is required, but ignored

מידע על הגדרת Maven מופיע במאמר pom.xml ומידע על הגדרת Gradle מופיע במאמר build.gradle.

קבצים אופציונליים

קבצי ההגדרות האלה הם אופציונליים:

ממקמים את הקבצים האלה ברמה העליונה של MyDir. אם אתם משתמשים באחד מהקבצים האלה, אתם צריכים לפרוס אותו בנפרד באמצעות הפקודה gcloud app deploy.

web.xml הוא אופציונלי ונדרש רק אם לא משתמשים בהערות של Servlet 3.x.

אפשר למקם תוכן אינטרנט סטטי, וגם דפי JavaServer, בספרייה webapp/. ‫Jetty 9, שמשמש כמאגר Servlet בסביבה הגמישה של App Engine, משתמש ב- Apache Jasper כיישום ברירת המחדל של JSP וכולל taglibs של JSTL.

קובץ ה-Dockerfile הוא אופציונלי ומשמש להתאמה אישית של זמן הריצה של Java.

הפעלת דחיסת gzip

הגורם המטפל gzip כלול ב-Jetty אבל לא מופעל כברירת מחדל. כדי להפעיל את המודול הזה, מגדירים את משתנה הסביבה JETTY_MODULES_ENABLE=gzip בקובץ app.yaml:

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

שימוש במדריך למתחילים

‫Jetty יכולה לקצר את זמן ההפעלה של האפליקציה על ידי סריקה מראש של התוכן שלה ויצירה של קובצי הגדרות. אם אתם משתמשים בתמונה מורחבת, אתם יכולים להפעיל את ההפעלה המהירה על ידי הפעלת /scripts/jetty/quickstart.sh ב-Dockerfile, אחרי שמוסיפים את אפליקציית ה-WAR.

משתני סביבה

אפשר להגדיר את משתני הסביבה האופציונליים הבאים שספציפיים לזמן הריצה של Java 8/Jetty 9. אפשר גם להגדיר משתני סביבה של OpenJDK 8.

כדי להגדיר משתני סביבה, משתמשים במפתח env_variables בקובץ app.yaml.

משתנה סביבה מאפיין Maven ערך/תגובה
JETTY_PROPERTIES רשימה של זוגות name=value שמופרדים בפסיקים, שמצורפת ל-$JETTY_ARGS
JETTY_MODULES_ENABLE רשימת מודולים להפעלה, מופרדת בפסיקים, שמוסיפים בסוף $JETTY_ARGS
JETTY_MODULES_DISABLE רשימת מודולים שמופרדת בפסיקים שצריך להשבית על ידי הסרה מ-$JETTY_BASE/start.d
JETTY_ARGS ארגומנטים שמועברים אל start.jar של Jetty. כאן צריך להעביר את כל הארגומנטים שמשמשים להגדרת jetty בהתאמה אישית.
JAVA_OPTS ארגומנטים של זמן ריצה של JVM

Cloud Logging משופר (בטא)

כשמריצים בסביבה הגמישה של App Engine, אפשר להגדיר את Java Util Logging לשליחת יומנים ל-Cloud Logging על ידי הגדרת משתנה הסביבה JETTY_ARGS. לדוגמה:

 env_variables:
   JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

צריך לספק קובץ logging.properties שמגדיר LoggingHandler באופן הבא:

handlers=com.google.cloud.logging.LoggingHandler

# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s

תמיכה בסביבות זמן ריצה אחרות של Java

אם אתם צריכים להשתמש בגרסת Java שלא נתמכת, אתם יכולים ליצור סביבת ריצה בהתאמה אישית ולבחור תמונת בסיס תקינה עם גרסת Java שאתם צריכים.

לגבי תמונות בסיס שסופקו על ידי Google או תמונות בסיס של Docker Java, אפשר לעיין במאמר בנושא יצירת סביבות ריצה בהתאמה אישית.

ארגון הקבצים

עץ המקור אמור להיראות כך:

MyDir/
  [pom.xml]
  [build.gradle]
  [index.yaml]
  [cron.yaml]
  [dispatch.yaml]
  src/main/
    appengine/
      app.yaml
    docker/
      [Dockerfile]
    java/
      com.example.mycode/
        MyCode.java
    webapp/
      [index.html]
      [jsp.jsp]
      WEB-INF/
        [web.xml]

בדיקה מקומית

כשבודקים בסביבה המקומית, אפשר להשתמש בשירותים מדומי Google Cloudבמקום בשירותים מרוחקים Google Cloud . אפשר להשתמש באמולטורים הבאים:

משתמשים בפקודה gcloud כדי להפעיל אותם לפני שמריצים את האפליקציה:

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

Maven

מוסיפים את השורות האלה לקובץ pom.xml של Maven כדי להוסיף את הפלאגין Jetty 9 Maven:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.2.v20170220</version>
</plugin>

כדי להריץ את האפליקציה באופן מקומי, משתמשים בפקודת Maven:

mvn jetty:run-exploded

Gradle

פועלים לפי ההוראות שבמאמר יצירת פרויקט Gradle חדש כדי להוסיף את תוסף Gretty Gradle ל-build.gradle, ומשתמשים בפקודה:

gradle jettyRun

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

כדי לאתחל את Google Cloud CLI, מריצים את הפקודה:

gcloud init

אחרי שמסיימים את ההגדרות, אפשר להשתמש ב-Google Cloud CLI כדי לפרוס את הספרייה הזו שמכילה את הקבצים app.yaml ו-WAR באמצעות הפקודה:

gcloud app deploy app.yaml

אם אתם משתמשים באחד מקובצי התצורה האופציונליים (index.yaml, ‏cron.yaml ו-dispatch.yaml), צריך לפרוס אותם בנפרד באמצעות הפקודה gcloud. לדוגמה:

gcloud app deploy cron.yaml

Maven

משתמשים ב-Maven כדי לפרוס את האפליקציה:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

מחליפים את PROJECT_ID במזהה הפרויקט. Google Cloud אם קובץ pom.xml שלכם כבר מציין את מזהה הפרויקט, אין צורך לכלול את המאפיין -Dapp.deploy.projectId בפקודה שמריצים.

Gradle

משתמשים ב-Gradle כדי לפרוס את האפליקציה:

gradle appengineDeploy