+++ title = "appengine" draft = false tags = [ "code", "build", "maven", "appengine" ] date = "2013-03-12" +++ # Maven Google Appengine #### maven-cli-plugin gebruiken als semi-hot-deployer Zie [Mavenizing my project](http://blog.cloudme.org/2010/04/mavenizing-my-project/) In plaats van betalende JRebel kan je bvb. voor GAE de jetty server op zetten met `gae:run`, maar alles in webapp ziet hij niet als een change. * In Tab1: `mvn gae:run`. * In Tab2: `mvn cli:execute` en dan commando's `compile war` in aparte tab die de eerste tab (nog actieve maven) oppikt dan. Andere mogelijkheid is natuurlijk voor niet-GAE dingen, `jetty:run` gebruiken (zie [code/build/maven]({{< relref "wiki/code/build/maven.md" >}})). :exclamation: de plugin is **niet werkend met maven 3**, zie https://github.com/mrdon/maven-cli-plugin/wiki/Maven-3.0-Support - ``` INFO] [INFO] --- maven-cli-plugin:1.0.6:execute (default-cli) @ gatecontrolweb --- [INFO] Waiting for commands... maven2> clean [INFO] Executing: org.apache.maven.plugins:maven-clean-plugin [clean] [ERROR] Unable to complete running command: clean java.lang.RuntimeException: org.apache.maven.plugin.MojoExecutionException: Unable to execute mojo at org.twdata.maven.cli.commands.ExecuteGoalCommand.run(ExecuteGoalCommand.java:111) at org.twdata.maven.cli.CliShell.interpretCommand(CliShell.java:48) at org.twdata.maven.cli.CliShell.run(CliShell.java:29) at org.twdata.maven.cli.AbstractCliMojo.displayShell(AbstractCliMojo.java:144) at org.twdata.maven.cli.AbstractCliMojo.access$000(AbstractCliMojo.java:22) at org.twdata.maven.cli.AbstractCliMojo$1.run(AbstractCliMojo.java:116) Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to execute mojo at org.shaded.mojoexecutor.MojoExecutor.executeMojo(MojoExecutor.java:106) at org.twdata.maven.cli.MojoCall.run(MojoCall.java:31) at org.twdata.maven.cli.commands.ExecuteGoalCommand.runMojo(ExecuteGoalCommand.java:125) at org.twdata.maven.cli.commands.ExecuteGoalCommand.run(ExecuteGoalCommand.java:104) ... 5 more Caused by: java.lang.UnsupportedOperationException at org.apache.maven.plugin.internal.DefaultPluginManager.executeMojo(DefaultPluginManager.java:90) at org.shaded.mojoexecutor.MojoExecutor.executeMojo(MojoExecutor.java:104) ... 8 more ``` Tof... #### maven-endpoint-plugin :exclamation: Google App Engine **endpoint metadata** genereren via maven kan ook en is een totaal andere plugin: http://code.google.com/p/maven-endpoint-plugin/ Hiervoor moet je de volgende repository gebruiken (zit niet in de central repo): ```xml cbreleases https://repository-michael.forge.cloudbees.com/release true true cbreleases https://repository-michael.forge.cloudbees.com/release true true ``` #### maven-gae-plugin Laatste versie van de "officiele" plugin op https://github.com/maven-gae-plugin/maven-gae-plugin Een compleet voorbeeld gebaseerd op de jsp archetype: ```xml 4.0.0 com.myapp.test testapp 1.0-SNAPSHOT war lkjm net.kindleit gae-runtime ${gae.version} pom org.datanucleus datanucleus-core ${datanucleus.version} runtime javax.transaction jta 1.1 org.apache.geronimo.specs geronimo-servlet_2.5_spec 1.2 provided standard taglibs 1.1.2 jar runtime org.slf4j slf4j-api 1.6.1 ch.qos.logback logback-classic 0.9.24 junit junit 4.5 test com.google.appengine appengine-api-labs ${gae.version} test com.google.appengine appengine-api-stubs ${gae.version} test com.google.appengine appengine-testing ${gae.version} test javax.jdo jdo2-api 2.3-eb javax.transaction transaction-api org.datanucleus maven-datanucleus-plugin 1.1.4 **/model/*.class true ASM JDO compile enhance org.datanucleus datanucleus-core ${datanucleus.version} javax.transaction transaction-api org.datanucleus datanucleus-rdbms ${datanucleus.version} org.datanucleus datanucleus-enhancer 1.1.4 javax.jdo jdo2-api 2.3-ec runtime org.apache.maven.plugins maven-war-plugin 2.1-beta-1 src/main/webapp true **/appengine-web.xml net.kindleit maven-gae-plugin 0.9.5 maven-release-plugin gae:deploy org.apache.maven.plugins maven-compiler-plugin 2.0 1.6 1.6 UTF-8 true 1.6.5 test 1.1.5 integration-build stage release-build performRelease true release ``` Hiermee kan je: 1. `mvn gae:unpack` uitvoeren om de GAE SDK in uw maven repo te unpacken zodat `${gae.home}` niet nodig is in de pom (vanaf 0.9.5) 1. `mvn gae:run` uitvoeren om een devserver te starten ##### Andere versie Een oudere versie (??) is deze: ```xml com.google.appengine appengine-maven-plugin ${appengine.target.version} ``` Hiermee kan je: 1. `mvn appengine:devserver` gebruiken om lokaal een jetty op te starten, en 1. `mvn appengine:update` om te deployen via de commandline.