The information on this page is intended for Velocity committers, not as end-user documentation.

(Note - some of the specific instructions this document are out of date now that Velocity has left Jakarta and gone TLP. In particular this applies to details on the Velocity site).

Building and Releasing the Velocity Engine

The Velocity project currently is built using Apache ant. This is the canonical build and in case of doubt, the results of this build win. While it is possible to build Velocity using Apache maven, the inherently instable nature of Maven 1.x and the not yet proven reliablity of Maven 2.x make us feel that maven is not yet 'ready' to be used as primary build tool for Velocity.

Velocity up to and including Version 1.4 uses only Apache ant as its build tool. Starting with Velocity 1.5, we will still build the actual release archives with ant but nightly builds and especially the web site located at will be built using Apache maven V1. Using Maven buys us a number of interesting reports and metrics during the build process (such as automated Changelogs, metrics, web-formatted test reports and so on).

Apache Maven uses a XML file called project.xml and a number of properties files to control its build process.

Locations and Pathes for Velocity


File system location (on minotaur)

web location

Release location


Mirrored through the Apache mirror system, available through

Maven repository release location


Maven repository snapshot location


Building the velocity site using maven

Due to the fact that deployment happens to the Apache web staging server from which the actual servers (which are mirror the content every few hours or so, changes are not immediately visible. If you want to check whether the content arrived ok on the apache server, use the trick (which is using the IP address and port 80 as your proxy host. Then access and you get the content directly from minotaur).

Snapshot deployment using Maven

There are two deployment repositories defined in

# Repository for official releases

# Repository for alpha, beta, rc releases

The selection of the repository happens through the maven.repo.list parameter. It defaults to the snapshot repository.

Q: Why are we using 'scpexe' and not 'scp' for deployment?

A: Because for Apache logins, according to infrastructure, we should stick to public/private key authentication to access the distribution servers. In that case, you would have to give the full path to your private key and also the passphrase (!) on the command line. E.g. like this:

 maven -Dmaven.repo.snapshot.privatekey=/home/henning/.ssh/id_dsa -Dmaven.repo.snapshot.passphrase=verysecret dist:deploy

Q: Why that? What about ssh-agent or pageant?

A: You will have to google for that answer quite a while. Here is the short answer: ssh-agent uses an unix domain-socket which cannot be accessed in pure Java. End of Story.

Q: scpexe:// does not work for me!

A: You have to add the following properties to your global (~/ on Unix) properties file:

maven.username= <your apache login>
maven.ssh.args=-o ForwardX11=false

I needed the last line to get scpexe to run on RedHat (Fedora) Linux.

Building and deploying snapshot versions using maven

After setting up your global build properties file as described above, you should be able to run the following commands:

Please note that due to a design problem in the artifact plugin of maven, the jar or distribution archive and the related POM can have (will have if you have a slow line) different time stamps. So the POMs are basically useless.

Preparing official releases using Apache Maven

As we currently build official releases with ant, this paragraph is intentionally empty. :-)

Preparing official releases using Apache ant

Before you start

Building the release

for i in *.tar.gz *.zip *jar; do
  gpg --default-key <your key id here> --armor --output $i.asc --detach-sig $i

You should now have sixteen files in that directory: A .jar, a .jar with dependencies, a .tar.gz and a .zip file. For each you must have a .md5, a .sha1 and a .asc file. If you file count is not correct, please DO NOT CONTINUE.

Uploading the release to

Now that the release is out, please let the mirrors some time to pick up the releases. In the meantime, please do the following preparations to make the release public.

Tag the release

svn copy -m 'Release <released version>'<released_version>

(The older tags are a bit in disarray. This will get cleaned up in the future).

Build the site docs

(This section is out of date)


Post-upload preparations

(This section is out of date)

svn checkout jakarta-site

Announcing the release

Announcements should have your '' email addresse as sender because the first two recipients discard everything not coming from an address. You should also use the same announcement text (or something closely resembling it) that you put into the news.xml file on the site.

ReleaseProcess (last edited 2009-09-20 22:06:09 by localhost)