This page shows you how to use
Maven (recommended) or
command to deploy your app. The
tool is included with the
App Engine Java SDK.
Before you begin
Setting up Maven (recommended)
Maven 3.1 or greater is required. Additionally, you must use Java 7. See the reference page for details on initial setup.
Compile and build your project using Maven before following this guide's steps.
Deploying an app
After you deploy, your application runs at the URL
Using Maven (recommended)
From your project's top level directory, invoke Maven as follows:
You will be prompted for an authorization code in the terminal window and your web browser will launch with a consent screen which you must accept in order to be authorized. Follow the prompts to copy any codes from the browser to the command line.
Using appcfg (alternative)
To upload your application files, run the
appcfg command with the
action and the location of your WAR file.
appengine-java-sdk\bin\appcfg.cmd [options] update <war-location>
Mac / Linux
./appengine-java-sdk/bin/appcfg.sh [options] update <war-location>
If you are using an HTTP proxy, use the
--proxy argument to tell
its address. (If you use a different proxy for HTTPS, use the
appengine-java-sdk\bin\appcfg.cmd --proxy=10.1.2.3 update <war-location>
Mac / Linux
./appengine-java-sdk/bin/appcfg.sh --proxy=10.1.2.3 update <war-location>
The tool will automatically use the application ID from the
app.yaml file. However,
many of our sample applications omit
application: from the
app.yaml file, as well
version: so you will need to specify a Console project ID as the application ID and the version of your choice when deploying them:
appengine-java-sdk\bin\appcfg.cmd -A <YOUR_PROJECT_ID> update -V v1 <war-location>
Mac / Linux
./appengine-java-sdk/bin/appcfg.sh -A <YOUR_PROJECT_ID> update -V v1 <war-location>
If your app is factored into more than one service, you can specify which services should be updated.
- If you are updating the default service, it must come first in the list.
- If you are uploading the app for the first time, the default service must be included.
appengine-java-sdk\bin\appcfg.cmd update <mod1-war-location> <mod2-war-location>
Mac / Linux
./appengine-java-sdk/bin/appcfg.sh update <mod1-war-location> <mod2-war-location>
You will receive verification via the command line as each service is successfully deployed.
If your app's
defines an index that doesn't yet exist, App Engine will create it after you
upload your app. This process may take a while, and any query that requires
the index will raise an exception until the index is built.
To prevent this:
- Give the app a new version number in
- In the Cloud Platform Console, check the status of the app's indexes.
- Once the index has been built, manually update the default version in the Cloud Platform Console.
index.xmlconfiguration before uploading the app:
appcfg.py update_indexes myapp/
In the Cloud Platform Console, check the status of the app's indexes.
- Once the index has been built, upload your app.
The following are common error messages that you might encounter:
Too Many Versions (403)
- App Engine has a limit on the number of deployed versions of your application. These differ for free applications and deployed applications. You can use the Cloud Platform Console to delete an older version and then upload your latest code.
You do not have permission to modify this app (403)
- This can occur when the account that you are authenticated as does not have
permission to deploy to the application ID that is specified in your command
or in your
appengine-web.xml. Check your application ID is accurate and matches the value of your Cloud Platform Console project ID. Next, check the project permissions in the console and verify that your account is listed with a sufficient permission level to allow for deploying apps. If the account permission and project ID appear correct, you can try to force a reauthentication of your SDK by removing the
.appcfg_oauth2_tokensfile from your home directory and retry the deployment commands.