Of these modules/trunks, the pom is released separately from the other three. However, resources, core, and extensions are always released together.

CARGO uses the Codehaus Nexus instances for release, which means that we release in two phases:

The maven-release-plugin will actually release to a staging area, i.e. the generated artifacts are only available on the staging repository

Once the staged version is OK (to confirm by opening a vote on the CARGO developers list, for example), it can be promoted (therefore, deployed to the Codehaus Maven repository and also synced to Maven Central)

As a consequence of this, the release process is as follows:

If the parent (pom) has changed, release the parent first without using the "staging" phase. To do so, log in to the Codehaus Nexus interface directly (without waiting for a vote) and release.

For resources, core and extensions:

Release all three

This will indeed create a big "staging" repository

Open the vote so the whole team can decide whether the artifacts are OK

If any container is not passing, move it to the all-unstable-downloadable list.

Make sure all containers in the all-stable-downloadable profile pass the samples.

Tagging and deploying on to the staging area

Start by erasing your local Maven repository (${user.home}/.m2/repository/, unless you've reconfigured this in your settings.xml). This will ensure that you don't have any artifacts cached locally that can't be found in public repositories.

Check if there have been SVN commits on that artifact since the latest stable release. If there have been, you'll need to release.

The parent (pom) typically don't change between versions.

First release the parent if required. Promote the staged artifact and wait for it to be synced to Maven Central (typically takes an hour or two).

Then release each of the code trunks resources, core and extensions.

In each code trunk's topmost pom.xml, change the links to the other trunks' versions to ${project.version} (the maven-release-plugin updates this to the actual version during release).

The typical Maven release procedure is to execute these commands for each trunk (i.e. repeat this for each trunk):

A dry-run before doing the actual release to ensure there aren't any problems:mvn clean release:prepare -DdryRun=true