Performing a Maven Project Release

This document covers the common release procedures used by the Maven team to perform releases.


Be sure that:

  • you have a recent Git client installed and on your shell's path.
  • you have JDK 8 installed and on your shell's path to build Maven 3.7.0+. Details about minimum JDK version to build an appropriate version can be found here:
  • if you receive an OutOfMemoryError during the build, make sure to have set the environment variable MAVEN_OPTS=-Xmx512m
  • you must use Maven 3.3.9+.
  • follow Apache environment configuration steps outlined at: Publishing Maven Artifacts.

Before you begin

If you started here, you may first want to review one of the following documents that cover the specifics of various types of releases we have in the Maven Project:

Consider updating the parent versions

If the item you are planning to release is not using the most recent version of its parent (see parent POMs index), consider taking this opportunity to update to it.

Make sure that site compilation and publication works

Particularly if you update the parent (but sometimes under other circumstances), the site compilation process may fail, or reveal a conspicuous error, or deploy to the wrong location. It is stressful and time-consuming to discover this *after* you stage a release and then try to follow the procedure to deploy the site for review. So you may find it more pleasant to check out the state of the site before you start.

Stage the Release

  1. Follow the release preparation, staging and closing the repository steps outlined in Publishing Maven Releases.
  2. Stage the latest documentation as explained in deploying Maven components reference documentation.

Call the vote

Propose a vote on the dev list with the closed issues, the issues left, the staging repository and the staging site. For instance:

To: "Maven Developers List" <>
Subject: [VOTE] Release Apache Maven XXX Plugin version Y.Z


We solved N issues:

There are still a couple of issues left in JIRA:


Source release checksum(s):
[NAME-OF] sha512: [SHA512SUM]

Staging site:

Guide to testing staged releases:

Vote open for at least 72 hours.

[ ] +1
[ ] +0
[ ] -1

To get the JIRA release notes link, browse to the plugin's or component's JIRA page, select the Road Map link, and use the link to Release Notes that is next to the version being released.

To get the list of issues left in JIRA, browse to the plugin's or component's JIRA page, and from the Preset Filters on the right, use the link for Outstanding issues.

The vote is open for at least 72 hours means, that you need to wait at least 72 hours before proceeding. This gives others time to test your release and check that everything is good. If you have received after that not enough +1 votes to reach the quorum, this doesn't mean, the vote failed. It just takes a bit longer.

Check the vote results

Copied from Votes on Package Releases.

Votes on whether a package is ready to be released use majority approval
-- i.e. at least three PMC members must vote affirmatively for release,
and there must be more positive than negative votes. Releases may not be vetoed.
Generally the community will cancel the release vote if anyone identifies serious problems,
but in most cases the ultimate decision, lies with the individual serving as release manager.
The specifics of the process may vary from project to project,
but the 'minimum quorum of three +1 votes' rule is universal.

The list of PMC members is available at

Once a vote is successful, post the result to the dev list and cc the PMC. For instance:

To: "Maven Developers List" <>
CC: "Maven Project Management Committee List" <>
Subject: [RESULT] [VOTE] Release Apache Maven XXX Plugin version Y.Z


The vote has passed with the following result:

+1 : <<list of names>>

PMC quorum: ...

I will promote the artifacts to the central repo.

If the vote is unsuccessful, the process will need to be restarted. Be sure to:

Copy the source release to the Apache Distribution Area

The official Apache release is the 'source-release' bundle distributed in, as described in Apache release distribution policy. All releases for Maven must be copied to the official Maven release area.

The release area is maintained with svnsubpub. To deliver a release, you add it to the subversion repository for the dist area: add the release, its signature and sha512 checksum files, copying them from target/checkout/target/ directory created during mvn release:perform step. Currently this requires to be in maven-pmc group (see INFRA-5945). If you are not a PMC member, drop a line to and ask them to do this step (and the next one) for you: the PMC member will get the source release bundle and its signature from Nexus staging repository and will create sha512 checksum file by hand, for example using shell:

for f in *.zip ; do echo -n $(sha512sum $f | cut -c -128) > $f.sha512 ; done

For example:


You should also run 'svn rm' as needed to clear out older releases. As per the release policy, only the latest release on a branch should stay in the main dist areas. So long as the previous release is at least a day old, the automatic archiver will have copied it to the archive.

To check that everything is ok in the dist area, dist-tool-plugin has been written and run once a day to produce "Check Source Release" and "Check Errors" reports.

Add the release for next board report

After committing the 3 source-release files, visit Apache Committee Report Helper to add your release data with the Full Version Name and Date of Release. (You will receive an e-mail for it as well).

If you are not a PMC member, drop a line to and ask them to do this step for you if they did not do the update while adding to release area.

Promote the release

Once the release is deemed fit for public consumption it can be transfered to a production repository where it will be available to all users.

  1. See Promoting a Repo for details on promotion.
  2. Deploy the current website

    As above, deploy the web site if appropriate and update the project site for the new release: use Component Reference Documentation Helper to generate commands or see Publishing versioned component reference documentation for explanations. Note that not all projects follow these conventions exactly.

    In case there's an overview table with version (e.g. plugins and shared) you can directly edit it on the github page.

  3. Update the version tracking in JIRA

    In the relevant project, go to Administration, then Versions. Mark the Y.Z version as 'released'. Create version Y.Z+1, if that hasn't already been done. You may also archive any deprecated releases (milestones or alphas) at this time.

    Note: Currently this requires to be in the maven-pmc group. So, if you don't see the Administration option in JIRA, kindly ask to do this step for you.

  4. Wait for everything to sync
    1. Sync to Maven Central

      The sync into central staging from occurs every 4 hours. There is a separate hourly schedule that runs which pushes from staging to the other central machines, and then updates the indexes.

    2. Sync to Maven Website

      If the project you are releasing doesn't yet use svnpubsub for site deployment, the deployment of the Maven website will take an hour or so to sync.

  5. Create an announcement.

    Following instructions are done for plugins: if you are releasing anything else than a plugin, you should adapt email content to match what you are releasing.

    1. Using Maven Changes Plugin

      If you are releasing a plugin or a shared component you can let Maven Changes Plugin generate, and eventually even send, the announcement for you. First make sure that you have configured the necessary properties in your committer settings.

      cd target/checkout
      mvn changes:announcement-mail -Papache-release

      If sending the mail should fail, the generated announcement is available in target/announcement (see announcement.vm) and you can use it as a base for sending the mail manually.

      If your SMTP server requires authentication you need to add the command line options for it:

      cd target/checkout
      mvn changes:announcement-mail -Dchanges.username=<SMTP-USERNAME> -Dchanges.password=<SMTP-PASSWORD> -Papache-release
    2. Manually

      Note: You must send this email from your apache email account, e.g. otherwise the email to will bounce.

      Subject: [ANN] Apache Maven XXX Plugin Y.Z Released
      The Apache Maven team is pleased to announce the release of the Apache Maven XXX Plugin, version Y.Z
      This plugin (insert short description of the plugin's purpose).
      You should specify the version in your project's plugin configuration:
      You can download the appropriate sources etc. from the download page:
      Release Notes - Maven XXX Plugin - Version Y.Z
      (Copy Here Release Notes in Text Format from JIRA)
      -The Apache Maven team
  6. If releasing the Apache Parent POM, notify

    Several projects follow this list, and should be made aware of changes to the common parent. This might also be a step to take if other shared resources are released, or if plugin releases are of particular interest to that group.

    If releasing Maven Core, notify

  7. Celebrate :o)