+++
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
cbreleaseshttps://repository-michael.forge.cloudbees.com/releasetruetruecbreleaseshttps://repository-michael.forge.cloudbees.com/releasetruetrue
```
#### 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.0com.myapp.testtestapp1.0-SNAPSHOTwarlkjmnet.kindleitgae-runtime${gae.version}pomorg.datanucleusdatanucleus-core${datanucleus.version}runtimejavax.transactionjta1.1org.apache.geronimo.specsgeronimo-servlet_2.5_spec1.2providedstandardtaglibs1.1.2jarruntimeorg.slf4jslf4j-api1.6.1ch.qos.logbacklogback-classic0.9.24junitjunit4.5testcom.google.appengineappengine-api-labs${gae.version}testcom.google.appengineappengine-api-stubs${gae.version}testcom.google.appengineappengine-testing${gae.version}testjavax.jdojdo2-api2.3-ebjavax.transactiontransaction-apiorg.datanucleusmaven-datanucleus-plugin1.1.4**/model/*.classtrueASMJDOcompileenhanceorg.datanucleusdatanucleus-core${datanucleus.version}javax.transactiontransaction-apiorg.datanucleusdatanucleus-rdbms${datanucleus.version}org.datanucleusdatanucleus-enhancer1.1.4javax.jdojdo2-api2.3-ecruntimeorg.apache.maven.pluginsmaven-war-plugin2.1-beta-1src/main/webapptrue**/appengine-web.xmlnet.kindleitmaven-gae-plugin0.9.5maven-release-plugingae:deployorg.apache.maven.pluginsmaven-compiler-plugin2.01.6UTF-8true1.6.5test1.1.5integration-buildstagerelease-buildperformReleasetruerelease
```
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.appengineappengine-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.