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