במסמך הזה נסביר איך לארוז מחדש אפליקציית Java 8 כקובץ JAR כדי להפעיל אותה בסביבת זמן ריצה של Java נתמכת. כדי להשתמש בסביבת זמן ריצה נתמכת של Java, אפשר להטמיע שרת כמו Jetty או להפוך את האפליקציה לקונטיינר באמצעות Docker כדי ליצור סביבת זמן ריצה בהתאמה אישית, בלי לשכתב את האפליקציה לחלוטין. אפשר להפעיל את אפליקציות ה-WAR הקיימות בפלטפורמות Java מודרניות או בסביבות גמישות בענן. אפשר לבחור מבין השיטות הבאות את השיטה שהכי מתאימה לאסטרטגיית הפריסה ולתשתית שלכם:
הכנת אפליקציית אינטרנט ב-Java 8 (קובץ WAR)
לפני שיוצרים מחדש חבילה של אפליקציית Java 8 כקובץ JAR נתמך, צריך ליצור קובץ WAR. בקטע הזה מופיעה דוגמה לאפליקציית Java 8 שיוצרת קובץ WAR. כדי ליצור אפליקציית Java 8 hello-world:
יוצרים קובץ
HelloServlet.javaבספריית קובצי המקור:יוצרים קובץ
web.xmlשל תיאור פריסה כדי להגדיר את אפליקציית האינטרנט:יוצרים דף נחיתה
index.jsp:מוסיפים את הקוד הבא לקובץ
pom.xmlכדי להגדיר את ה-build לאפליקציית Java 8:הגדרת אריזת WAR:
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>פלאגין
maven-war-pluginעם מקור ויעדmaven.compilerשמוגדרים לגרסה1.8:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>8</java.version> </properties>javax.servlet-apidependency:<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>הגדרת Maven:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build>
ספריית הפרויקט צריכה להיות דומה למבנה הבא:
├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jspמריצים את הפקודה
mvn installבספריית הפרויקט של האפליקציה כדי ליצור את קובץ ה-WARHelloWorldApp-1.0.warבספריית היעד.
שימוש בקובצי Dockerfile לפריסת האפליקציה (מומלץ)
סביבות זמן ריצה בהתאמה אישית מתאימות לפלטפורמות שתומכות בקונטיינרים בהתאמה אישית, כמו סביבות זמן ריצה בהתאמה אישית ב-App Engine. סביבות זמן ריצה בהתאמה אישית מספקות גמישות בכך שהן מאפשרות לכם להגדיר את סביבת זמן הריצה. כדי לראות דוגמה להדרכה בנושא פריסת סביבות זמן ריצה בהתאמה אישית, אפשר לעיין במאמר יצירת אפליקציה עם סביבת זמן ריצה בהתאמה אישית בסביבה הגמישה של App Engine.
ההוראות הבאות מתארות איך להכניס את אפליקציית Java 8 שלכם לקונטיינר באמצעות Dockerfile:
- הכנת אפליקציית אינטרנט ב-Java 8 (קובץ WAR)
- יצירת קובץ אימג' של קונטיינר והעברה שלו בדחיפה ל-Artifact Registry
- פריסת האפליקציה
יצירת קובץ אימג' של קונטיינר והעברה שלו בדחיפה ל-Artifact Registry
בקטע הזה מוסבר איך ליצור קובץ אימג' של Docker באמצעות Cloud Build ולהעביר אותו בדחיפה למאגר של Artifact Registry. כדי ליצור תמונת קונטיינר של האפליקציה:
יוצרים קובץ
cloudbuild.yamlבתיקיית קובצי המקור כדי ליצור את קובץ האימג' של Docker ולדחוף אותו ל-Artifact Registry:steps: # Step 1: Build the Docker image - name: "gcr.io/cloud-builders/docker" args: - "build" - "-t" - "$LOCATION-docker.pkg.dev/$PROJECT/$REPOSITORY/SERVICE:VERSION" - "." # Step 2: Push the Docker image to Artifact Registry - name: "gcr.io/cloud-builders/docker" args: - "push" - "$LOCATION-docker.pkg.dev/$PROJECT/$REPOSITORY/SERVICE:VERSION" images: - "$LOCATION-docker.pkg.dev/$PROJECT/$REPOSITORY/SERVICE:VERSION"מחליפים את:
- LOCATION עם Google Cloud האזור שבו אתם פורסים את האפליקציה.
- PROJECT במזהה הפרויקט ב- Google Cloud .
- REPOSITORY בשם המאגר ב-Artifact Registry.
- IMAGE בכתובת ה-URL של קובץ אימג' של קונטיינר.
- TAG בתג של קובץ אימג' של קונטיינר.
יוצרים קובץ Dockerfile עם ההגדרות הבאות:
מורידים ומתקינים את Docker כדי לבדוק את האפליקציה לדוגמה, ומריצים את קונטיינר Hello World במחשב המקומי.
יוצרים את קובץ אימג' של קונטיינר ומעבירים אותו בדחיפה ל-Artifact Registry:
gcloud builds submit .
פריסת האפליקציה
כדי לפרוס את אפליקציית App Engine:
מגדירים את הקובץ
app.yamlכך שישתמש בסביבת זמן ריצה בהתאמה אישית בספריית המקור:ספריית הפרויקט צריכה להיות דומה למבנה הבא:
├── Dockerfile ├── README.md ├── app.yaml ├── cloudbuild.yaml ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jspמפעילים את הפקודה
gcloud app deployכדי לפרוס את האפליקציה:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagמחליפים את:
- LOCATION עם Google Cloud האזור שבו אתם פורסים את האפליקציה.
- PROJECT במזהה הפרויקט ב- Google Cloud .
- REPOSITORY בשם המאגר ב-Artifact Registry.
- IMAGE בכתובת ה-URL של קובץ אימג' של קונטיינר.
- TAG בתג של קובץ אימג' של קונטיינר.
שימוש בסביבת זמן ריצה מוטמעת של Java
ההוראות הבאות מראות איך לארוז מחדש אפליקציית Java 8 של App Engine עם שרת מוטמע (Jetty) כדי להפעיל אותה כקובץ JAR עצמאי בסביבת ריצה של Java נתמכת:
- יצירת שרת Jetty מוטמע
- הכנת אפליקציית אינטרנט ב-Java 8 (קובץ WAR)
- הפעלת קובץ ה-WAR עם Jetty מוטמע ופריסת האפליקציה
יצירת שרת Jetty מוטמע
כדי לארוז את קובץ ה-WAR של האפליקציה עם שרת Jetty מוטמע, פועלים לפי השלבים הבאים:
יוצרים מחלקה
Mainכדי לאתחל ולהגדיר את שרת Jetty להרצת קובץ ה-WAR. הסיווגMainמגדיר את יציאת השרת שמוגדרת כברירת מחדל ל-8080. אפשר גם לשנות את קוד המקור כדי להשתמש ביציאה שצוינה במשתנה הסביבהPORT. המחלקותMainמגדירות את ה-handlerWebAppContextכדי להציג את קובץ ה-WAR:יוצרים את קובץ הפרויקט של Maven
pom.xmlומוסיפים את ההגדרות הבאות:מגדירים את המאפיינים
maven.compiler.sourceו-maven.compiler.targetלזמן ריצה של Java נתמך:מוסיפים יחסי תלות ל-Jetty:
מגדירים את הנכס
maven-assembly-pluginכדי לארוז יחסי תלות:
ספריית הפרויקט צריכה להיות דומה למבנה הבא:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xmlמריצים את הפקודה
mvn installבספריית הפרויקט של כלי ההרצה של Jetty. הפעולה הזו יוצרת אתjetty-jar-with-dependencies.jarבספריית היעד.פועלים לפי ההוראות שבקטע הכנת אפליקציית אינטרנט ב-Java 8 (קובץ WAR) כדי ליצור קובץ WAR.
מריצים את קובץ ה-WAR עם Jetty מוטמע ופורסים את האפליקציה
בקטע הזה מוסבר איך לארוז את האפליקציה בקובץ JAR שניתן להפעלה. כדי לארוז ולפרוס את האפליקציה:
ממקמים את קובץ ה-JAR של Jetty runner שנוצר
jetty-jar-with-dependencies.jarואת קובץ ה-WAR של האפליקציהHelloWorldApp-1.0.warבאותה תיקייה.מריצים את האפליקציה באמצעות זמן ריצה של Java נתמך:
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war- בדפדפן האינטרנט, עוברים לכתובת http://localhost:8080. אמור להופיע דף הפתיחה של האפליקציה.
יוצרים רכיב
entrypointבקובץapp.yamlכדי לקרוא לקובץjetty-jar-with-dependencies, ומעבירים את קובץ ה-WAR כארגומנט. הגרסה שאתם מציינים בקובץ ה-WAR צריכה להיות זהה לגרסה של קובץpom.xml:מפעילים את האפליקציה באמצעות הפקודה
gcloud app deploy.