views:

229

answers:

3

I have an Project that I distribute by sending out large packages. I'd like to know if there is a user friendly way of using Maven to distribute updates of the project? I'd need something like what is done for updating softwares like Firefox or Acrobat Reader. Check a respository, warn user of an update, download and reconfigure. All within a simple and friendly interface. Alternative open source java projects are welcome.

+1  A: 

If your project is a library: You need to set up a public maven repository (or use Maven Central). This way, your users can fetch the latest version of your library by updating their POM.

If your project is something else, you can use a Maven repository to keep the packages in a place for easy deployment for you (and easy download for everyone else). Next, you'll need to point your software to the site and download the file "maven-metadata.xml" once in a while. Maven will create and manage this file for you when you say "mvn deploy". The file contains the latest version numbers.

All you have to do is to download this small file and examine it. If there is a new version, open a dialog for your user so they can decide to download it. I suggest to offer "Only download" and "Download and upgrade" as separate options because users like to download some time in the background and then install between two projects. They don't like nagging dialogs ("New version available. Download and ruin your day now?" ... "I asked five minutes ago. Download now!" ... "Downloading anyway. Credit card details found on your hard drive. Selecting other important software you need. Purchasing now. Have a nice day!" ;) ).

Aaron Digulla
A: 

I don't think maven has any standard way of providing this functionality. Maven does have notion of "release" and "deploy", but these don't apply to the scenario you are describing.

Ken Liu
A: 

We're currently planning to do exactly the same thing. We're looking for, or will create a utility which regularly wgets the maven-metadata.xml for the required artifact and if its newer than the installed version, replaces the installed version with it. It seems straightforward so its suspicious that its not already available - it makes me wonder if there isn't something wrong with the idea.

The other piece of the puzzle we need is to coordinate updates of load balanced configurations (we're using HAProxy to provide fault tolerance - each application is deployed to a pair of linux servers running on VMs on separate VMWare hosts), so that if an update fails for any reason, the updated server takes itself down and the other server knows not to apply the update. However, this should probably be done in a separate utility, using the httpchk facility of HAProxy to remove the failed server and using the stats URL of HAProxy for the second server to detect if its OK to proceed with the update.

Anyway, this seems like a logical way to deploy to multiple production sites, so I'd be interested to know what infrastructure there is to support it.

Roger

related questions