Using Apache Maven and the App Engine Plugin

This page explains how to manage an App Engine project using Apache Maven, a software project management and comprehension tool. It is capable of building WAR files for deployment into App Engine. Google provides a plugin and Maven Archetypes which are included with Maven 3.1 and greater.

When you use Maven, you don't need to download the Java libraries from the Google App Engine SDK. Maven does that for you. You can also use Maven to test your app locally and upload (deploy) it to production App Engine.

Setting up Maven

Configuring Java

  1. If you don't have Java, download, install and configure it.

  2. You can use Java 7 or Java 8, but you must use Java 7 bytecode level. If you are using Java 8, configure your app to target Java 7 in your project's pom.xml:

    <properties>  <!-- App Engine Standard currently requires Java 7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>
    </properties>

Installing Maven 3.3.9+

To determine whether Maven is installed and which version you have, invoke the following command:

 mvn -v

If you don't have the proper version of Maven installed:

  1. Download Maven 3.3.9 or greater from the Maven website.
  2. Install Maven 3.3.9 or greater on your local machine.

Using Eclipse with a Maven project (optional)

A Maven project has a different layout than an Eclipse project. If you wish to use a Maven project with Eclipse, you should use Eclipse for Java Enterprise Edition (EE) and one of the following approaches:

Using Maven

Adding the App Engine plugin to an existing project (optional)

To add the Google App Engine Maven plugin to an existing Maven project, add the following into the plugins section in the project pom.xml file:

<plugin>
   <groupId>com.google.appengine</groupId>
   <artifactId>appengine-maven-plugin</artifactId>
   <version>1.9.44</version>
</plugin>

Choosing an archetype

Maven Archetypes allow users to create Maven projects using templates that cover common scenarios. App Engine takes advantage of this Maven feature to provide some useful App Engine archetypes at Maven Central. Select an App Engine archetype appropriate for your app:

Application Type Artifact Description
App Engine app* guestbook-archetype Generates the guestbook demo sample, complete and ready to run and test.
App Engine app* appengine-skeleton-archetype Generates a new, empty App Engine project ready for your own classes and resources, but with required files and directories.
Cloud Endpoints API backend hello-endpoints-archetype Generates a simple starter Cloud Endpoints backend API project, ready to build and run.
Cloud Endpoints API backend endpoints-skeleton-archetype Generates a new, empty Cloud Endpoints backend API project ready for your own classes and resources, with required files and directories.

* App Engine app in this context means a regular App Engine app, not an app serving as a Cloud Endpoints backend API.

Creating a new project

During project creation, Maven prompts you to supply groupId, artifactId, version, and the package for the project.

Term Meaning
groupId A namespace within Maven to keep track of your artifacts. When people consume your project in their own Maven Project, it will serve as an attribute of the dependency they will end up specifying.
artifactId The name of your project within Maven. It is also specified by consumers of your project when they depend on you in their own Maven projects.
version The initial Maven version you want to have your project generated with. It's a good idea to have version suffixed by -SNAPSHOT because this will provide support in the Maven release plugin for versions that are under development. For more information, see the Maven guide to using the release plugin.
package The Java package created during the generation.

The following table shows how to use App Engine Maven archetypes to create an App Engine app or a Cloud Endpoints backend API. Click on the desired app type to see the instructions.

App Engine App

To create an App Engine App:

  1. Get an application ID from the Cloud Platform Console.

  2. Change directory to a directory where you want to build the project.

  3. Invoke the following Maven command:

         mvn archetype:generate -Dappengine-version=1.9.44 -Dapplication-id=your-app-id -Dfilter=com.google.appengine.archetypes:
    

    where -Dappengine-version is set to the most recent App Engine Java SDK version, and application-id is set to the Cloud Platform Console application ID used for your app.

  4. If you want to create the complete, ready-to-run guestbook sample app, supply the number corresponding to com.google.appengine.archetypes:guestbook-archetype.

    If you want to create an empty project that contains the required directory structure and files, ready for your own classes, supply the number corresponding to com.google.appengine.archetypes:appengine-skeleton-archetype.

  5. Select the most recent version from the displayed list of available archetype versions by accepting the default.

  6. When prompted to Define value for property 'groupId', supply the desired namespace for your app; for example, com.mycompany.myapp.

  7. When prompted to Define value for property 'artifactId', supply the project name; for example, myapp or guestbook.

  8. When prompted to Define value for property 'version', accept the default value.

  9. When prompted to Define value for property 'package', supply your preferred package name (or accept the default). The generated Java files will have the package name you specify here.

  10. When prompted to confirm your choices, accept the default value (Y).

  11. Wait for the project to finish generating. then change directories to the new project directory, for example guestbook/.

  12. Build the project by invoking

    mvn clean install
    
  13. Wait for the project to build. When the project successfully finishes you will see a message similar to this one:

    [INFO] --------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] --------------------------------------------------
    [INFO] Total time: 1:16.656s
    [INFO] Finished at: 2016-08-04T16:18:24-07:00
    [INFO] Final Memory: 16M/228M
    [INFO] --------------------------------------------------
    
  14. If you created the sample Guestbook demo app using the guestbook-archetype artifact:

    1. Test the application locally in the development server:

      mvn appengine:devserver
      

      Wait for the dev server to start up. When it finishes starting up, you will see a message similar to this:

       [INFO] INFO: Module instance default is running at http://localhost:8080/
       [INFO] Sep 15, 2014 11:44:19 AM com.google.appengine.tools.development.AbstractModule startup
       [INFO] INFO: The admin console is running at http://localhost:8080/_ah/admin
       [INFO] Sep 15, 2014 11:44:19 AM com.google.appengine.tools.development.DevAppServerImpl doStart
       [INFO] INFO: Dev App Server is now running
      
    2. Visit the application at the default URL and port http://localhost:8080/ used by the development server. You will see the guestbook demo app.

    3. To shut down the app and the development server, press Control+C in the Windows/Linux terminal window you started it in, or CMD+C on the Mac.

  15. If you created a new, empty app using the appengine-skeleton-archetype artifact:

    1. Before starting to code your own classes for the app, familiarize yourself with the basic project layout and the required project files is complete: inside the directory where you created the project, you'll have a subdirectory named myapp, which contains a pom.xml file, the src/main/java subdirectory, and the src/main/webapp/WEB-INF subdirectory:

      Maven Project Layout

      • You'll add your own application Java classes to src/main/java/...
      • You'll configure your application using the file src/main/webapp/WEB-INF/appengine-web.xml
      • You'll configure your application deployment using the file src/main/webapp/WEB-INF/web.xml
    2. Create your application Java classes and add them to src/main/java/.../ For more information, see Getting Started

    3. Add the UI that you want to provide to your app users. For more information, see Adding Application Code and UI.

    4. The artifact you used to create the project has done the basic src/main/webapp/WEB-INF/appengine-web.xml configuration for you. However, for more advanced configuration, you may need to edit this file. For more information, see Configuring with appengine-web.xml.

    5. Edit the file src/main/webapp/WEB-INF/web.xml to map URLs to your app handlers, specify authentication, filters, and so forth. This is described in detail in The Deployment Descriptor.

Cloud Endpoints Backend API

To create a Cloud Endpoints backend API project:

  1. Change directory to a directory where you want to build the project.

  2. Invoke the following Maven command:

         mvn archetype:generate -Dappengine-version=1.9.44 -Dfilter=com.google.appengine.archetypes:
    

    where -Dappengine-version is set to the most recent App Engine Java SDK version.

  3. If you want to create the complete, ready-to-run Hello Endpoints backend API, supply the number corresponding to hello-endpoints-archetype.

    If you want to create an empty project that contains the required directory structure and files, ready for your own classes, supply the number corresponding to endpoints-skeleton-archetype.

  4. Select the most recent version from the displayed list of available archetype versions by accepting the default.

  5. When prompted to Define value for property 'groupId', supply the namespace for your app; for example, com.mycompany.myapp. (For the Hello Endpoints sample backend API, supply the value com.google.appengine.samples.helloendpoints.)

  6. When prompted to Define value for property 'artifactId', supply the project name; for example, myapp. (For the Hello Endpoints sample, supply the value helloendpoints.)

  7. When prompted to Define value for property 'version', accept the default value.

  8. When prompted to Define value for property 'package', accept the default value.

  9. When prompted to confirm your choices, accept the default value (Y).

  10. Wait for the project to finish generating. then change directories to the new project directory, for example helloendpoints/.

  11. Build the project by invoking

    mvn clean install
    
  12. Wait for the project to build. When the project successfully finishes you will see a message similar to this one:

    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 14.846s
    [INFO] Finished at: Tue Jun 03 09:43:09 PDT 2014
    [INFO] Final Memory: 24M/331M
    
  13. If you created the sample Hello Endpoints sample backend API:

    1. Test the app