Deploying IzPack Versions to Public Repositories

General Requirements

Create and Export a GnuPG Key

Your public key must be added to the KEYS file in the source code parent directory:

gpg --list-sigs "your real name" >> KEYS
gpg --armor --export "your real name" >> KEYS

Export your public key to a public key server:

gpg --keyserver --send-key <your_key_id>

Without your GPG key exported to a public key server you won't be able to close a Codehaus Nexus staging repository and thus activating new releases. 

In case of trouble exporting from the command line you could try submitting your key via the web UI of a keyserver of your choice, for example:

For more information on how to create and distribute GPG keys, look at the GNU Privacy Handbook.

Configure Codehaus Maven credentials

The Codehaus parent, which relies the IzPack parent POM on, requires authentication usign the following convention in your $M2_HOME/settings.xml:

        <id></id> <!-- used for site deployment -->
        <id>codehaus-nexus-staging</id> <!-- used for release deployment -->
        <id>codehaus-nexus-snapshots</id> <!-- used for snapshot deployment -->

The server IDs are given by the Codehaus parent POM, use your Codehaus account as username and password. For information on how to encrypt your personal password see the Maven documentation.

For further information see also: Codehaus Maven Repository Usage Guide.

Install the Codehaus CA Certificate into the Java JDK

  1. Download the StartSSL CA and StartSSL Intermediate CA to your local filesystem.
  2. Install the downloaded certificate into the JDK
If do not have permission to modify your JDK installation you can add the certificate to your own keystore in your home directory:
export JAVA_HOME=/usr/java/jdk1.6.0_37
pushd $(dirname $0)
$JAVA_HOME/bin/keytool -import -alias StartSSL-CA -file startssl-CA.pem -keystore $KEYSTORE
$JAVA_HOME/bin/keytool -import -alias StartSSL-Intermediate -file startssl-Intermediate.pem -keystore $KEYSTORE

In case of using your own keystore, you must tell Maven to use it by exporting special Maven options:

export MAVEN_OPTS="$HOME/.keystore \<your_keystore_pwd> \$HOME/.keystore \<your_truststore_pwd"

For more information, see Installing a new CA into the JDK.

If the certificate files attached here should be outdated, export the current certificate from your browser after navigating to

You are invited to update the according link above.

Deploying IzPack Snapshots

Any IzPack developer is encouraged to publish new -SNAPSHOT versions as they publish changes to the Codehaus Git repository. Public snapshot deployments can be done each time by a developer provided the code passes automatic tests (do not skip tests before deploying).

Test your snapshot locally by deploying it to the local repository:

mvn clean install

Deploying a snapshot to the wild is done by:

mvn clean verify deploy

Deploying IzPack Releases

Note: Before releasing, ask the fellow developers whether they agree!

For a comprehensive manual how to manage Codehaus deployments see Performing a Release. 

For your own security, using --batch-mode is not really recommended since you have to enter your GPG passphrase in clear text on the command line, which could be saved for example in .bash_history. Rather wait and enter this passphrase as soon as Maven requests it on the command line input.

As an example, we will consider the release of version 5.0.0-rc2.

Do a dry run

mvn -Dtag=izpack-5.0.0-rc2 release:prepare -DdryRun=true -DreleaseVersion=5.0.0-rc2 -DdevelopmentVersion=5.0.0-rc3-SNAPSHOT -Dusername=<your_codehaus_login>


Build locally and prepare the staging repository at Codehaus Nexus:

mvn release:clean
mvn -Dtag=izpack-5.0.0-rc2 release:prepare -DreleaseVersion=5.0.0-rc2 -DdevelopmentVersion=5.0.0-rc3-SNAPSHOT -Dusername=<your_codehaus_login>

mvn release:perform -Dusername=your_codehaus_login

Don't forget to push the local POM changes and tags to Github after releasing: 

git push origin master
git push --tags origin master

and to Codehaus (provided a remote codehaus initialized to ssh://

#git remote add codehaus ssh://
git push codehaus master
git push --tags codehaus master


Close, promote and release from the staging repository at Codehaus Nexus:

Log in at Codehaus Nexus Staging Repositories, check the staging repository and if everything is fine, Close and Release it (in this order).


Recovering from Failed Releases

There are several states you may get in after the release process described above fails:

Recover the staging repository:

Log in at  Codehaus Nexus Staging Repositories, select the the staging repository entry which failed and drop it.

Reset the local git repository to the state before releasing:

First remove the additional files generated by the release plugin:

mvn release:clean

Using git log get  the latest commit before the auto-generated commit of the release plugin follow, for example:

commit 49a769a0eefa7476d5ccc3849692ffe7b6e5ed2e
Merge: d682c30 3218c81
Author: René Krell <>
Date: Tue Oct 15 09:45:05 2013 -0700
Merge pull request #143 from rkrell/IZPACK-993

[IZPACK-993] Dynamic variables - add configuration attribute to control whether to escape backslashes when reading from option and INI files

Now you can reset the local repository to the original state (or using FETCH_HEAD if the remote repository is still blocked and unchanged).

git reset --hard  49a769a0eefa7476d5ccc3849692ffe7b6e5ed2e

Check whether the release plugin has already tagged the target version using git tag. If yes, delete the tag to avoid release:perform from failing:

git tag --delete izpack-5.0.0-rc1

Now you can repeat the release process from the beginning.


Post-processing and Announcing Releases

  1. Use WebDAV at to push releases from the Maven repository
    Example 5.0.0-rc1:
    Copy izpack/izpack-dist/target/izpack-dist-5.0.0-rc1.jar  to  webdavs://<xircles_username>
  2. Use the following channels for announcements:
    Website, automatically deployed to
    Blog Register and post an announcement. This is automatically forwarded to Twitter and Facebook.
    Mailing list:
    Google+ group IzPack (in case you're a maintainer):
    Twitter (ping @jponge): @izpack