במסמך הזה מוסבר איך לארוז מחדש אפליקציה ב-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-apiתלות:<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.