Apache Maven is a build automation tool for Java.
App Engine provides a Maven plugin that you can use to build and deploy your app to App Engine. The plugin does not support Enterprise Application Archive (EAR) projects.
Before you start
-
Determine if Maven is installed and which version you have by running the following command:
mvn - vIf Maven is installed, a long string of information beginning with
Apache Mavenand followed by a version number such as3.9.1will display. -
If you don't have Maven 3.9.1 or newer installed:
-
If you haven't already done so, follow the steps here to download the gcloud CLI, create your Google Cloud project, and initialize your App Engine app.
-
Install the gcloud CLI
app-engine-javacomponent:gcloud components install app - engine - java
Adding the App Engine Maven plugin
To use the App Engine Maven plugin
, add the following lines to the plugins
section in
your project's pom.xml
file:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.8.1</version>
</plugin>
Building and deploying your app
After you add the App Engine Maven plugin to your project's pom.xml
file, you can use the following command to build deploy your app:
mvn package appengine:deploy -Dapp.deploy.projectId= PROJECT_ID
Replace PROJECT_ID
with the ID of your Google Cloud project. If
your pom.xml
file already specifies your
project ID
, you don't need to include the -Dapp.deploy.projectId
property in the
command you run.
The package
goal builds and packages your app, and the appengine:deploy
goal
does the following:
-
Generates a unique version ID for the new version of your app.
-
Deploys the new version to App Engine.
-
Routes all traffic to the new version.
Changing the deployment defaults
You can change the default deployment behavior by passing parameters in the appengine:deploy
command. For example, the following command deploys the
service defined in your pom.xml
file to a specific Google Cloud project,
assigns a custom version ID to the service, and turns off automatic traffic
routing for the new version:
mvn appengine:deploy -Dapp.deploy.projectId = PROJECT_ID -Dapp.deploy.version = VERSION_ID -Dapp.deploy.promote = False
You can also use the appengine:deploy
command to deploy configuration files,
such as cron.yaml
, dispatch.yaml
, and index.yaml
.
For more information, see the appengine:deploy
reference
.
What's next
- Review the JDK 21 App Engine Maven plugin sample .
- Explore the plugin code and report issues on GitHub .
- Learn how to specify parameters for tasks by referring to App Engine Maven Goals and Parameters .

