Auf dieser Seite erfahren Sie, wie Sie ein App Engine-Projekt mit Apache Maven verwalten, einem Tool zum Verwalten und Nachvollziehen von Softwareprojekten. Dieses Tool ist in der Lage, WAR-Dateien zur Bereitstellung in App Engine zu erstellen. Google stellt ein Plug-in und Maven-Archetypen zur Verfügung, die in Maven 3.5 enthalten sind.
Wenn Sie Maven verwenden, müssen Sie die Java-Bibliotheken nicht manuell aus dem App Engine SDK herunterladen. Maven lädt bei Bedarf automatisch die entsprechenden Bibliotheken herunter. Außerdem können Sie Ihre Anwendung mit Maven lokal testen und in der App Engine-Produktionsumgebung bereitstellen.
Maven einrichten
Java konfigurieren
- Laden Sie Java herunter und installieren und konfigurieren Sie es, sofern nicht bereits geschehen.
- Legen Sie die Compiler-Flags in
pom.xml
fest, um den Bytecode von Java 8 anzugeben.
Maven 3.5 installieren
Mit dem folgenden Befehl können Sie prüfen, ob Maven installiert ist und wenn ja, welche Version:
mvn -v
Falls nicht die richtige Version von Maven installiert ist, gehen Sie wie folgt vor:
- Gehen Sie zur Maven-Website und laden Sie Maven 3.5 herunter.
- Installieren Sie Maven 3.5 auf Ihrem lokalen Rechner.
Cloud-Projekt einrichten und validieren
Sie müssen Ihr Cloud-Projekt einrichten und das App Engine SDK installieren:
Verwenden Sie die Google Cloud Console, um Ihr Cloud-Projekt zu erstellen und einzurichten:
- Wählen Sie ein Cloud-Projekt aus oder erstellen Sie ein neues.
- Wenn Sie eine App Engine-Anwendung für Ihr Projekt erstellen müssen, werden Sie zur Auswahl einer Region aufgefordert, in der sich die App Engine-Anwendung befinden soll.
- Das Dashboard wird geöffnet, nachdem die App Engine-Anwendung in Ihrem Projekt erstellt wurde.
Installieren Sie das App Engine SDK für Java und fügen Sie das Verzeichnis Ihrem PATH hinzu.
Maven verwenden
App Engine-Plug-in in ein vorhandenes Projekt aufnehmen (optional)
Damit Sie das Maven-Plug-in für Google App Engine in einem vorhandenen Maven-Projekt verwenden können, fügen Sie Folgendes in den Abschnitt plugins
der Projektdatei pom.xml
ein:
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.9.87</version>
</plugin>
Archetyp auswählen
Mit Maven-Archetypen können Nutzer Maven-Projekte mit Vorlagen erstellen, die allgemeine Szenarien abdecken. App Engine verwendet dieses Maven-Feature, um einige nützliche App Engine-Archetypen auf Maven Central zur Verfügung zu stellen. Wählen Sie einen geeigneten App Engine-Archetypen für Ihre Anwendung aus:
Anwendungstyp | Artefakt | Beschreibung |
---|---|---|
App Engine-App | guestbook-archetype |
Generiert das Gästebuch-Demobeispiel vollständig, sodass Sie es ausführen und testen können. |
App Engine-App | appengine-skeleton-archetype |
Erstellt ein neues, leeres App Engine-Projekt mit den erforderlichen Dateien und Verzeichnissen, einsatzbereit für Ihre eigenen Klassen und Ressourcen. |
Neues Projekt erstellen
Bei der Projekterstellung werden Sie von Maven aufgefordert, groupId
, artifactId
, version
und das package
für das Projekt anzugeben.
Begriff | Bedeutung |
---|---|
groupId |
Ein Namespace in Maven, um Ihre Artefakte zu erfassen. Wenn Nutzer Ihr Projekt in ihrem eigenen Maven-Projekt verwenden, dient er als Attribut der Abhängigkeit, die die Nutzer letztendlich angeben. |
artifactId |
Der Name Ihres Projekts in Maven. Er wird auch von Nutzern Ihres Projekts angegeben, wenn ihre eigenen Maven-Projekte von Ihrem Projekt abhängig sind. |
version |
Die ursprüngliche Maven-Version, mit der Ihr Projekt generiert werden soll. Es empfiehlt sich, version mit dem Suffix -SNAPSHOT zu versehen, da dies im Maven-Release-Plug-in Unterstützung für Versionen bietet, die sich in der Entwicklung befinden. Weitere Informationen finden Sie in der Maven-Anleitung zur Verwendung des Release-Plug-ins. |
package |
Das während der Generierung erstellte Java-Paket. |
Im Folgenden wird beschrieben, wie App Engine-Maven-Archetypen zum Erstellen einer App Engine-Anwendung verwendet werden.
So erstellen Sie eine App Engine-Anwendung:
Wechseln Sie in das Verzeichnis, in dem Sie das Projekt erstellen möchten.
Rufen Sie den folgenden Maven-Befehl auf:
mvn archetype:generate -Dappengine-version=1.9.87 -Djava8=true -DCloudSDK_Tooling=false -Dapplication-id=your-app-id -Dfilter=com.google.appengine.archetypes:
Stellen Sie
-Dappengine-version
auf die neueste Version des App Engine SDK für Java undapplication-id
auf die ID Ihres Cloud-Projekts.Legen Sie
-Djava8=true
fest, um das Projekt in der Java 8-Laufzeit bereitzustellen.Legen Sie
-DCloudSDK_Tooling=false
fest, um das App Engine SDK für Java-Tooling zu verwenden.Wenn Sie zur Auswahl eines Archetyps aufgefordert werden, wählen Sie für den App Engine-Skeleton-Archetyp den Wert
2
aus. Dadurch wird ein leeres Projekt erstellt, in dem die erforderliche Verzeichnisstruktur und die erforderlichen Dateien enthalten sind.Wenn Sie zur Angabe der Version aufgefordert werden, drücken Sie die Eingabetaste, um die neueste Standardversion auszuwählen.
Geben Sie bei der Aufforderung
Define value for property 'groupId'
den gewünschten Namespace für Ihre Anwendung an. Beispiel:com.mycompany.myapp
.Geben Sie bei der Aufforderung
Define value for property 'artifactId'
den Projektnamen an. Beispiel:myapp
.Übernehmen Sie den Standardwert (
Define value for property 'version'
), wenn Sie zur Bestätigung Ihrer Auswahl aufgefordert werden.Geben Sie bei der Aufforderung
Define value for property 'package'
Ihren bevorzugten Paketnamen an (oder übernehmen Sie den Standardwert). Die generierten Java-Dateien übernehmen den hier angegebenen Paketnamen.Übernehmen Sie den Standardwert (
Y
), wenn Sie zur Bestätigung Ihrer Auswahl aufgefordert werden.Warten Sie, bis das Projekt die erforderlichen Verzeichnisse und Dateien erstellt hat. Wechseln Sie dann in das neue Projektverzeichnis, beispielsweise
myapp/
.Wenn das Projekt erfolgreich erstellt wurde, sehen Sie eine Nachricht wie diese:
[INFO] -------------------------------------------------- [INFO] BUILD SUCCESS [INFO] -------------------------------------------------- [INFO] Total time: 1:16.656s [INFO] Finished at: 2017-06-04T16:18:24-07:00 [INFO] Final Memory: 16M/228M [INFO] --------------------------------------------------
Bevor Sie mit dem Codieren Ihrer eigenen Klassen für die Anwendung beginnen, sollten Sie sich mit dem grundlegenden Projektlayout und den erforderlichen Projektdateien vertraut machen. Im Verzeichnis, in dem Sie das Projekt erstellt haben, ist ein Unterverzeichnis namens
myapp
. Es umfasst die Dateipom.xml
, das Unterverzeichnissrc/main/java
und das Unterverzeichnissrc/main/webapp/WEB-INF
:- Sie fügen Ihre eigenen Java-Anwendungsklassen unter
src/main/java/...
hinzu. - Konfigurieren Sie Ihre Anwendung mit der Datei
src/main/webapp/WEB-INF/appengine-web.xml
. - Konfigurieren Sie die Anwendungsbereitstellung mit der
src/main/webapp/WEB-INF/web.xml
-Datei
- Sie fügen Ihre eigenen Java-Anwendungsklassen unter
Erstellen Sie Ihre Java-Anwendungsklassen und fügen Sie sie unter
src/main/java/...
hinzu. Weitere Informationen finden Sie unter Anwendung in App Engine erstellen.Fügen Sie die UI hinzu, die Sie Ihren Anwendungsnutzern zur Verfügung stellen möchten. Weitere Informationen finden Sie unter Umgang mit Formulardaten.
Das Artefakt, mit dem Sie das Projekt erstellt haben, hat die grundlegende Konfiguration in
src/main/webapp/WEB-INF/appengine-web.xml
für Sie erledigt. Wenn Sie die Konfiguration jedoch erweitern möchten, müssen Sie diese Datei unter Umständen bearbeiten. Weitere Informationen finden Sie unter Mit appengine-web.xml konfigurieren.Bearbeiten Sie die
src/main/webapp/WEB-INF/web.xml
-Datei, um URLs Ihren Anwendungs-Handlern zuzuordnen, die Authentifizierung und Filter anzugeben usw. Dies wird unter Der Deployment-Deskriptor detailliert beschrieben.
Maven-Projekt verwalten
Projekt kompilieren und erstellen
So erstellen Sie eine Anwendung, die mit App Engine-Maven-Archetypen generiert wurde:
- Wechseln Sie zum Hauptverzeichnis des Projekts, beispielsweise
guestbook/
. Rufen Sie Maven auf:
mvn clean package
Warten Sie, bis das Projekt erstellt ist. Wenn das Projekt erfolgreich erstellt wurde, sehen Sie eine Nachricht wie diese:
BUILD SUCCESS Total time: 10.724s Finished at: Thur Jul 04 14:50:06 PST 2017 Final Memory: 24M/213M
Testen Sie die Anwendung wahlweise anhand des folgenden Verfahrens.
Anwendung mit dem Entwicklungsserver testen
Sie können Ihre Anwendung in der Entwicklungsphase jederzeit auf dem Entwicklungsserver ausführen und testen, wenn Sie das Maven-Plug-in für App Engine aufrufen. Die Vorgehensweise variiert geringfügig je nach dem Artefakt, das zur Erstellung des Projekts verwendet wurde.
So testen Sie Ihre Anwendung:
Erstellen Sie gegebenenfalls Ihre Anwendung (
mvn clean package
).Wechseln Sie zum Verzeichnis der obersten Ebene Ihres Projekts, beispielsweise
myapp
, und rufen Sie Maven auf:mvn appengine:devserver
Warten Sie, bis der Server gestartet wurde. Wenn er vollständig gestartet wurde und Ihre Anwendung ausgeführt wird, sehen Sie eine Nachricht ähnlich der Folgenden:
Aug 24, 2017 2:56:42 PM com.google.appengine.tools.development.DevAppServerImpl start INFO: The server is running at http://localhost:8080/ Aug 24, 2017 2:56:42 PM com.google.appengine.tools.development.DevAppServerImpl start INFO: The admin console is running at http://localhost:8080/_ah/admin
Rufen Sie mit Ihrem Browser
http://localhost:8080/
auf, um auf Ihre Anwendung zuzugreifen.Beenden Sie die Anwendung und den Entwicklungsserver, indem Sie im Windows/Linux-Terminalfenster, in dem Sie den Server gestartet haben, Strg + C oder auf dem Mac cmd + C drücken.
Port für lokale Tests angeben
Wenn Sie Ihre Anwendung auf dem lokalen Entwicklungsserver ausführen, ist der Standardport 8080
. Sie können diese Standardeinstellung ändern, indem Sie den Plug-in-Eintrag für appengine-maven-plugin
anpassen (oder ihn hinzufügen, falls er nicht vorhanden ist). Beispielsweise geben wir Port und Adresse im folgenden <plugin>
-Eintrag in <plugins>
in der pom.xml
-Hauptdatei der Anwendung an (myapp/pom.xml
):
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.9.87</version>
<configuration>
<enableJarClasses>false</enableJarClasses>
<port>8181</port>
<address>0.0.0.0</address>
</configuration>
</plugin>
Beachten Sie, dass <port>
den hier angegebenen Port auf 8181
setzt und als Adresse 0.0.0.0
angegeben wird. Das bedeutet, dass der Entwicklungsserver Anfragen vom lokalen Netzwerk entgegennimmt.
Anwendung bereitstellen
Informationen hierzu finden Sie in der Anleitung zum Bereitstellen der Anwendung.
Referenz: Verfügbare Ziele
Sobald das Maven-Plug-in für App Engine der pom.xml
-Datei des Projekts hinzugefügt wurde, sind mehrere App Engine-spezifische Maven-Ziele verfügbar. Um alle verfügbaren Ziele anzuzeigen, rufen Sie folgenden Befehl auf:
mvn help:describe -Dplugin=appengine
Die Ziele des Maven-Plug-ins für App Engine können als Entwicklungsserverziele, Anwendungs- und Projektverwaltungsziele sowie Endpoints-Ziele kategorisiert werden.
Entwicklungsserverziele
Im Folgenden sind die Entwicklungsserverziele aufgeführt:
appengine:devserver
Führt den App Engine-Entwicklungsserver aus. Bei Ausführung des Servers wird regelmäßig geprüft, ob sich
appengine-web.xml
geändert hat. Wenn dies der Fall ist, führt der Server einen Hot Reload der Anwendung durch. Daher müssen Sie Ihre Anwendung aufgrund von Änderungen anappengine-web.xml
nicht beenden oder neu starten. Folgende Parameter sind verfügbar:<fullScanSeconds>
<address>
<disableUpdateCheck>
<jvmFlags>
<port>
<server>
Um die Ausführung des Servers beispielsweise im Debug-Modus an Port 8000 ohne Sperrung zur Startzeit zu ermöglichen, können Sie folgende Flags verwenden:
<jvmFlags> <jvmFlag>-Xdebug</jvmFlag> <jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag> </jvmFlags>
Das
<fullScanSeconds>
-Flag ist standardmäßig auf 5 Sekunden eingestellt. Das bedeutet, dass der Server alle fünf Sekunden auf Änderungen in den Webanwendungsdateien prüft und die Anwendung automatisch neu lädt. Dies ist in IDEs nützlich, die die Funktion zum Speichern bei Kompilierung unterstützen, wie zum Beispiel NetBeans. Um dieses Feature nutzen zu können, müssen Sie den<build>
-Abschnitt konfigurieren:<build> <outputDirectory>target/${project.artifactId}-${project.version}/WEB-INF/classes</outputDirectory> <plugins> .... </plugins> </build>
appengine:devserver_start
Führt für den Entwicklungsserver einen asynchronen Start aus und kehrt dann zur Befehlszeile zurück. Die Ausführung dieses Ziels ist mit der Ausführung des Ziels
devserver
identisch, mit dem Unterschied, dass Maven weiter Ziele verarbeitet und beendet wird, wenn der Server ausgeführt wird.appengine:devserver_stop
Stoppt den Entwicklungsserver. Ist nur verfügbar, wenn Sie den Entwicklungsserver mit
appengine:devserver_start
gestartet haben.
Anwendungsverwaltungsziele
Die Ziele für die Anwendungs- und Projektverwaltung sind in der folgenden Tabelle aufgeführt:
Ziel | Beschreibung | Entsprechender gcloud -Befehl |
---|---|---|
appengine:backends_stop |
Damit wird jeder laufende Entwicklungsserver gestoppt, der den in Ihrer pom.xml -Datei konfigurierten Port abhört. Dieses Ziel kann in Verbindung mit dem Befehl devserver_start verwendet werden, um Integrationstests mit dem Maven-Plug-in durchzuführen. |
|
appengine:backends_configure |
Konfiguriert das angegebene Back-End. | |
appengine:backends_delete |
Löscht das angegebene Back-End. | |
appengine:backends_rollback |
Führt für ein zuvor laufendes Update ein Rollback aus. | |
appengine:backends_start |
Startet das angegebene Back-End. | |
appengine:backends_update |
Aktualisiert das angegebene Back-End oder alle Back-Ends, wenn kein Back-End angegeben ist. | |
appengine:enhance |
Führt die Datanucleus JDO-Erweiterung von App Engine aus. | |
appengine:rollback |
Führt für ein laufendes Update ein Rollback aus. | gcloud app versions start , gcloud app versions stop |
appengine:set_default_version |
Legt die Standardversion der Anwendung fest. | gcloud app services set-traffic |
appengine:update |
Erstellt oder aktualisiert eine Anwendungsversion. | gcloud app deploy |
appengine:update_cron |
Aktualisiert die Cronjobs der Anwendung. | gcloud app deploy |
appengine:update_dispatch |
Aktualisiert die Weiterleitungskonfiguration der Anwendung. | gcloud app deploy |
appengine:update_dos |
Aktualisiert die DoS-Schutzkonfiguration der Anwendung. | gcloud app deploy |
appengine:update_indexes |
Aktualisiert Anwendungsindizes. | gcloud datastore create-indexes [INDEX_YAML] |
appengine:update_queues |
Aktualisiert Aufgabenwarteschlangen-Definitionen der Anwendung. | gcloud app deploy |
appengine:vacuum_indexes |
Löscht nicht verwendete Indizes aus der Anwendung. | gcloud datastore cleanup-indexes [INDEX_YAML] |
appengine:start_module_version |
Startet die angegebene Modulversion. | gcloud app versions start |
appengine:stop_module_version |
Stoppt die angegebene Modulversion. | gcloud app versions stop |
Fehlerbehebung bei Uploadfehlern
Wenn Sie das Aktualisierungsziel verwenden, kann der Aktualisierungsversuch mit einer Nachricht ähnlich der folgenden fehlschlagen: 404 Not Found This application does not exist (app_id=u'your-app-ID')
.
Dieser Fehler tritt auf, wenn Sie über mehrere Google-Konten verfügen und das Update mit dem falschen Konto ausführen.
Um dieses Problem zu beheben, wechseln Sie in das Verzeichnis ~
, suchen Sie nach der Datei mit dem Namen .appcfg_oauth2_tokens_java
und benennen Sie diese um. Wiederholen Sie anschließend das Update.