Pixeldrama

Fallen beim Entwickeln für Google App Engine mit Maven + JAX-RS REST

February 15, 2013

Momentan nutze ich das offizielle App Engine Maven Plugin von Google. Mit dem praktischen Goal: mvn appengine:devserver ist das lokale Entwickeln kein Problem.

Schwierig wurde es mit dem Goal mvn appengine:update. Diese Goal erzeugt eine App Engine Instanz auf Googles Servern. Das funktioniert aber nur, wenn man vorher mit seiner Google E-Mail Adresse von googlemail.com zu gmail.com migriert ist, was zur Hölle? Sollte man das nicht getan haben, bricht der Deploy-Vorgang mit einem nicht näher spezifierten Fehler ab. Der Error-Stacktrace lässt einem auch im Dunkeln.

Das nächste Problem war, dass ich mvn appengine:update nicht mehr nutzen konnte, da mein OAuth token sich nach der Migration, warum auch immer, geändert hatte. Also musste ich das vom app-engine-sdk mit geliefert appcfg.sh Skript nutzen, um meine webapp zu deployen. Ihr findet das Skript unter $HOME/.m2/repository/com/google in einem Unterordner. Dieses Skript ersetzt aber nicht automatisch die Variable ${gae.application.version} in der appengine-web.xml, so dass man da von Hand etwas eintragen sollte. Die Versionsnummer sollte auf keinen Fall einen Punkt enthalten, das hätte weitere mysteriöse Fehlermeldungen zu Folge, aus denen man nicht ablesen kann, was das Problem ist.

Wenn Ihr einen REST-Service mit Jersey bauen wollt gibt es hier eine brauchbare Anleitung. Deaktiviert aber um auf jeden Fall die automatische wadl-Generierung, denn auch die führt zu mysteriösen Problemen.

<!-- Jersey Servlets -->
<servlet>
  <servlet-name>Jersey Web Application</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

  <init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>de.berlin.fu.pdgs.server.rest</param-value>
  </init-param>

  <init-param>
    <param-name>com.sun.jersey.config.feature.DisableWADL</param-name>
    <param-value>true</param-value>
  </init-param>
</servlet>

Sollte man diese Kleinigkeiten beachteten, lassen sich webapps wunderbar mit dem Maven-Build-Tool entwickeln.