In diesem Dokument wird beschrieben, wie Sie eine Java 8-Anwendung als JAR-Datei neu verpacken, um sie in einer unterstützten Java-Laufzeit auszuführen. Wenn Sie eine unterstützte Java-Laufzeit verwenden möchten, können Sie entweder einen Server wie Jetty einbetten oder Ihre Anwendung mit Docker für eine benutzerdefinierte Laufzeit containerisieren, ohne die Anwendung komplett neu schreiben zu müssen. Sie können Ihre vorhandenen WAR-Anwendungen auf modernen Java-Plattformen oder flexiblen Cloud-Umgebungen ausführen. Wählen Sie eine der folgenden Methoden aus, die am besten zu Ihrer Bereitstellungsstrategie und Infrastruktur passt:
Java 8-Webanwendung vorbereiten (WAR-Datei)
Bevor Sie Ihre Java 8-Anwendung als unterstützte JAR-Datei neu verpacken, müssen Sie eine WAR-Datei erstellen. In diesem Abschnitt finden Sie eine Beispielanwendung für Java 8, mit der eine WAR-Datei erstellt wird. Folgen Sie der Anleitung, um eine hello-world-Anwendung für Java 8 zu erstellen:
Erstellen Sie im Quellverzeichnis eine Datei
HelloServlet.java:Erstellen Sie eine
web.xmlDeployment-Deskriptordatei, um Ihre Webanwendung zu konfigurieren:Erstellen Sie eine Landingpage
index.jsp:Fügen Sie der Datei
pom.xmlden folgenden Code hinzu, um den Build für Ihre Java 8-Anwendung zu definieren:WAR-Verpackungskonfiguration:
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>maven-war-plugin-Plug-in, wobei die Quelle und das Ziel vonmaven.compilerauf Version1.8festgelegt sind:<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-Abhängigkeit:<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>Maven-Konfiguration:
<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>
Ihr Projektverzeichnis sollte in etwa so aussehen:
├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jspFühren Sie
mvn installim Projektverzeichnis Ihrer Anwendung aus, um die WAR-DateiHelloWorldApp-1.0.warim Zielverzeichnis zu generieren.
Anwendung mit Dockerfiles bereitstellen (empfohlen)
Benutzerdefinierte Laufzeiten eignen sich für Plattformen, die benutzerdefinierte Container unterstützen, z. B. benutzerdefinierte App Engine-Laufzeiten. Benutzerdefinierte Laufzeiten bieten Flexibilität, da Sie die Laufzeitumgebung konfigurieren können. Ein Beispiel für die Bereitstellung benutzerdefinierter Laufzeiten finden Sie unter Benutzerdefinierte Laufzeitanwendung in der flexiblen App Engine-Umgebung erstellen.
In der folgenden Anleitung wird beschrieben, wie Sie Ihre Java 8-Anwendung mit einem Dockerfile containerisieren:
- Java 8-Webanwendung vorbereiten (WAR-Datei)
- Container-Image erstellen und in Artifact Registry bereitstellen
- Anwendung bereitstellen
Container-Image erstellen und in Artifact Registry bereitstellen
In diesem Abschnitt wird beschrieben, wie Sie mit Cloud Build ein Docker-Image erstellen und in ein Artifact Registry-Repository verschieben. So erstellen Sie ein Container-Image Ihrer Anwendung:
Erstellen Sie im Quellverzeichnis eine Datei
cloudbuild.yaml, um das Docker-Image zu erstellen und in Artifact Registry zu verschieben: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"Ersetzen Sie:
- LOCATION durch die Google Cloud Region, in der Sie Ihre Anwendung bereitstellen.
- PROJECT durch Ihre Google Cloud Projekt-ID.
- REPOSITORY durch den Namen Ihres Artifact Registry-Repositorys.
- IMAGE durch die URL Ihres Container-Images.
- TAG durch das Tag Ihres Container-Images.
Erstellen Sie ein Dockerfile mit der folgenden Konfiguration:
Laden Sie Docker herunter und installieren Sie es, um Ihre Beispielanwendung zu testen und den Hello World-Container auf Ihrem lokalen Computer auszuführen.
Erstellen Sie das Container-Image und verschieben Sie es in Artifact Registry:
gcloud builds submit .
Anwendung bereitstellen
So stellen Sie Ihre App Engine-Anwendung bereit:
Konfigurieren Sie die Datei
app.yamlso, dass im Quellverzeichnis eine benutzerdefinierte Laufzeit verwendet wird:Ihr Projektverzeichnis sollte in etwa so aussehen:
├── Dockerfile ├── README.md ├── app.yaml ├── cloudbuild.yaml ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jspStellen Sie Ihre Anwendung mit dem
gcloud app deployBefehl bereit:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagErsetzen Sie:
- LOCATION durch die Google Cloud Region, in der Sie Ihre Anwendung bereitstellen.
- PROJECT durch Ihre Google Cloud Projekt-ID.
- REPOSITORY durch den Namen Ihres Artifact Registry-Repositorys.
- IMAGE durch die URL Ihres Container-Images.
- TAG durch das Tag Ihres Container-Images.
Eingebettete Java-Laufzeit verwenden
In der folgenden Anleitung wird gezeigt, wie Sie eine App Engine Java 8-Anwendung mit einem eingebetteten Server (Jetty) neu verpacken, um sie als eigenständige JAR-Datei in einer unterstützten Java Laufzeit auszuführen:
- Eingebetteten Jetty-Server erstellen
- Java 8-Webanwendung vorbereiten (WAR-Datei)
- WAR-Datei mit eingebettetem Jetty ausführen und Anwendung bereitstellen
Eingebetteten Jetty-Server erstellen
So bündeln Sie die WAR-Datei Ihrer Anwendung mit einem eingebetteten Jetty-Server:
Erstellen Sie eine
Main-Klasse, um den Jetty-Server zu initialisieren und zu konfigurieren, damit Ihre WAR-Datei ausgeführt werden kann. DieMain-Klasse richtet den Serverport ein, der standardmäßig auf8080festgelegt ist. Sie können den Quellcode auch so ändern, dass ein Port verwendet wird, der in der UmgebungsvariablenPORTangegeben ist. DieMain-Klasse konfiguriert denWebAppContext-Handler, um Ihre WAR-Datei bereitzustellen:Erstellen Sie die Maven-Projektdatei
pom.xmlund fügen Sie die folgende Konfiguration hinzu:Legen Sie die
maven.compiler.sourceundmaven.compiler.targetEigenschaften auf eine unterstützte Java Laufzeit fest:Fügen Sie Abhängigkeiten für Jetty hinzu:
Konfigurieren Sie die Eigenschaft
maven-assembly-plugin, um Abhängigkeiten zu verpacken:
Ihr Projektverzeichnis sollte in etwa so aussehen:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xmlFühren Sie den Befehl
mvn installim Projektverzeichnis des Jetty-Runners aus. Dadurch wird die Dateijetty-jar-with-dependencies.jarim Zielverzeichnis generiert.Folgen Sie der Anleitung im Abschnitt Java 8-Webanwendung vorbereiten (WAR-Datei), um eine WAR-Datei zu erstellen.
WAR-Datei mit eingebettetem Jetty ausführen und Anwendung bereitstellen
In diesem Abschnitt werden die Schritte zum Verpacken Ihrer Anwendung in einer ausführbaren JAR-Datei beschrieben. Folgen Sie dieser Anleitung, um Ihre Anwendung zu verpacken und bereitzustellen:
Platzieren Sie die generierte Jetty-Runner-JAR-Datei
jetty-jar-with-dependencies.jarund die WAR-Datei Ihrer AnwendungHelloWorldApp-1.0.warim selben Verzeichnis.Führen Sie die Anwendung mit einer unterstützten Java-Laufzeit aus:
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war- Rufen Sie in Ihrem Webbrowser die Adresse http://localhost:8080 auf. Die Begrüßungsseite Ihrer Anwendung sollte angezeigt werden.
Erstellen Sie in der Datei
app.yamleinentrypoint-Element, um die Dateijetty-jar-with-dependenciesaufzurufen, und übergeben Sie die WAR-Datei als Argument. Die in der WAR-Datei angegebene Version muss mit der Version in der Dateipom.xmlübereinstimmen:Stellen Sie Ihre Anwendung mit dem
gcloud app deployBefehl bereit.