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 -v- If Maven is installed, a long string of information beginning with - Apache Mavenand followed by a version number such as- 3.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.