Jetty Logo
Contact the core Jetty developers at

private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services from 1 day to full product delivery

Releasing Jetty

Jetty Release Notes
Building and Deploying Aggregate Docs
Deploying Distribution Files
Updating Stable Links

There are a number of steps to releasing jetty. It is not just limited to running a couple of maven commands and then moving onto bigger and better things. There are a number of process related issues once the fun maven bits have been completed.

Jetty Release Notes

This release script is for jetty-9 (to release jetty-7 or jetty-8 see older documentation).

  1. Pick your version identification strings.

    These follow a strict format and will be used when prompted during step 6 below.

    Release Version                : 9.0.0.v20130322  (v[year][month][day])
    Next Development Version       : 9.0.1-SNAPSHOT
    Tag Name                       : jetty-9.9.0.v20130322        
  2. We use the 'release-9' branch to avoid problems with other developers actively working on the master branch.

    // Get all of the remotes
    $ git pull origin
    // Create a local tracking branch (if you haven't already)
    $ git branch --track release-9 refs/remotes/origin/release-9
    // Check out your local tracking branch.
    $ git checkout release-9
    // Merge from master into the branch (this becomes your point in time
    // from master that you will be releasing from)
    $ git merge --no-ff master
  3. Update the VERSION.txt with changes from the git logs, this populates the resolves issues since the last release.

    $ mvn -N -Pupdate-version        
  4. Edit the VERSION.txt file to set the 'Release Version' at the top alongside the Date of this release.

    $ vi VERSION.txt        
  5. Make sure everything is commit'd and pushed to

    $ git commit -m "Updating VERSION.txt top section" VERSION.txt
    $ git push origin release-9        
  6. Prepare the Release

    NOTE: This step updates the <version> elements in the pom.xml files, does a test build with these new versions, and then commits the pom.xml changes to your local git repo. The eclipse-release profile is required on the prepare in order to bring in the jetty aggregates as that profile defines a module which is ignored otherwise.

    $ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \
                          -DdevelopmentVersion=9.0.1-SNAPSHOT \
                          -Dtag=jetty-9.0.0.v20130322 \
  7. Perform the Release

    NOTE: This step performs the release and deploys it to a staging repository.

    $ mvn release:perform
  8. Set up files for next development versions.

    Edit VERSION.txt for 'Next Development Version' at the top. Do not date this line.

    Make sure everything is commit'd and pushed to

    $ vi VERSION.txt
    $ git commit -m "Updating VERSION.txt top section" VERSION.txt
    $ git push origin release-9
  9. Close the staging repository on

  10. Announce stage to the mailing list for testing.

  11. Once the staged repository has been approved by the rest of the committers.

    1. Release the staging repository to maven central on

    2. Merge back the changes in release-9 to master

      $ git checkout master
      $ git merge --no-ff release-9
      $ git push origin master

Building and Deploying Aggregate Docs

Define the server entry in your .m2/settings.xml file. You'll need to have access to the machine to perform these actions. If you don't know if you have access to this then you probably don't and will need to ask a project leader for help.

To build and deploy the aggregate javadoc and jxr bits:

cd target/checkout
mvn -Paggregate-site javadoc:aggregate jxr:jxr
mvn -N site:deploy    

This will generate the aggregate docs and deploy them to the /home/www/jetty/<project version>/jetty-project directory on The last step is to ssh to that machine and adjust the placement of the apidocs and xref directories to remove the jetty-project folder from the url so that we maintain a clean and consistent api url scheme.

ssh [email protected]
cd /home/data/httpd/<VERSION>
mv jetty-project/apidocs .
mv jetty-project/xref .
rmdir jetty-project    

The end result should be api documents accessible from<project version>/api-docs and<project version>/xref

Deploying Distribution Files

Since we also provide alternative locations to download jetty distributions we need to copy these into place. There are a couple of scripts that will take care of this although they need to be localized to your particular execution environment and you need to have authorization to put stuff where it needs to go. These scripts are located at: Once these are setup you can deploy a release to eclipse and codehaus with the following incantation.

$ ./ 9.0.0.v20130322
$ ./ 9.0.0.v20130322 9.0.0    

Each of these scripts will download all of the relevant files from maven central and then copy them into the correct location on eclipse and codehaus infrastructure. On the eclipse side of it they will also adjust the documentation links if they remain broken as well as regenerate all of the html files on the eclipse download site.

Updating Stable Links

Since we are not allowed to have symbolic links on the download site we have to log into the machine manually and remove the previous stable directory and update it with a new release. Maintaining the conventions we use on the site will allow all 'stable' links to be stable and not needed to update to the latest major Jetty build version:

$ ssh <user>
$ cd ~downloads/jetty/
$ rm -Rf stable-9
$ cp -r <version> stable-9
$ ./   

This needs to be done for all Eclipse Jetty releases (regardless of version). In addition we have to work to reduce the footprint of jetty on the primary eclipse download resources so we want to move older releases to the eclipse archive site.

$ cd ~/downloads/jetty
$ mv <old release> /home/data/httpd/    

See an error or something missing? Contribute to this documentation at Github!