Sonatype's Hudson Plans for Maven Integration


February 3, 2009 By Jason van Zyl

I want to share with you what Sonatype is planning to do with Hudson – I hope you will be interested.  We are planning a lot of work on the OSS side and will contribute that all back (provided the license of Hudson does not change to the CDDL). We are also planning to work on a commercially supported version of Hudson and we will create some additional commercial plugins. I think people here will be most interested in the OSS work so I’ll start there.

It all starts with the work we’ve done with Tom Huybrechts over the last few months to embed Plexus inside Hudson. This has several implications, especially for those who are interested in Maven integration. Tom made the PluginManager itself pluggable and the Plexus version of the PluginManager that was created finds Plexus components in its standard way. As a result plugins now work the same way in Hudson, Maven and Nexus.

From a Sonatype perspective we want to use the same system inside Maven, Nexus, Hudson, and Eclipse. Maven 2.x has used Plexus from the beginning, Nexus has used Plexus since its inception, the work Tom has done for Sonatype now allows us to write any Hudson extension using Plexus, and we are currently working on a Plexus/OSGi bridge as part of our work in m2eclipse so Plexus components will operate in OSGi runtimes as bundles.. We want to take a Plexus component and reuse it across all of these systems.

With the Plexus integration we have for Hudson we can now leverage any of the components that were created for Continuum (Continuum was probably the first Plexus application) and we want to create tight integration with Maven SCM (also a set of Plexus components) and the quality reporting system in Maven (also a set of Plexus components). We fully realize that changes will need to be made in Maven SCM and in the reporting/quality system in Maven to facilitate the integration. We already see changes that we must make in Maven 3.x and the underlying plugin and reporting APIs so that we can run efficiently in an OSGi-based environment like Eclipse. As an example of what we’re doing lets take Emma as an example.

We have started work to create Plexus components for Emma, we now have a reworked set of Maven Emma plugins, and we’ve attempted to bridge our work into Eclemma (which is currently the best Emma plugin for Eclipse). We now want to take the Plexus components and make it work for use inside Hudson. We want to be able to contribute to data collection and trending.  We have done all sorts of prototype work to create a new Maven API for quality metrics by moving away from a document production model to a data production model. I think it’s unfortunate that a very large number of Hudson plugins essentially duplicate many of the Maven plugins that exist because it wasn’t a huge change we made to collect data as opposed to producing a document.

In the same vein we will make any modifications necessary to the Maven SCM API to integrate better with Hudson and Eclipse team providers. When our Plexus/OSGi bridge work is done any component written in Plexus will be available inside an OSGi environment as a bundle. I don’t know how popular OSGi will be as runtime for applications as it has its great parts, but has some serious detractions as well. What is certain is that OSGi rules on the developer desktop with Eclipse so we have taken that into account and need to make sure the tools we produce function equally well in Maven and Eclipse. We also feel that Hudson rules in the arena of build automation and so we’re focusing on what we feel is an ideal set of tools consisting of Maven, Nexus, Hudson, and Eclipse and we are working on production quality integration between these four systems.

So the first thing we would like to contribute is the Plexus integration that Tom has worked on. This integration is will not work with the current form of Hudson because an old version of the Maven Embedder is used in the core of Hudson and it depends on a much older version of Plexus. It’s up to you guys but if you want the Plexus integration in your SVN I am happy to work on a branch helping to decouple the current form of Maven integration from the core so that both versions of Plexus can exist. This would allow anyone to write a Hudson plugin in much the same way they would write a Maven plugin.

We are also working on a new Maven job type and some new Hudson features which depend on Maven 3.x. So this work I wouldn’t recommend for public consumption yet, but as Maven 3.x reaches GA so will the Hudson integration we are working on. So we are also happy to contribute this if you are interested.  We would also like to work on integrating JSecurity and our REST framework (currently based on Restlet but moving toward Jersey). For anyone who is familiar with Nexus we want to integrate the security systems and we want to be able to create a UI for Hudson based on ExtJS. These parts we would also be happy to contribute if you are interested. This is something that we want at Sonatype and we fully realize this may not mesh with what you want. We’re not going to try and shove anything down anyone’s throats. We just want to be open about what we’re working on and the direction we’re going and if you guys want the code we’re happy to contribute.

Beyond that we will be working on some commercial extensions. We want to integrate a workflow system, create bullet proof release management that is integrated with Nexus, tools for the automatic provisioning of build nodes and custom data collections tools the creation of what we think is a pretty cool dashboard idea.

Happy to answer any questions, and if people want the work that we’ve slated for OSS we are more then happy to contribute it. We use Hudson on a daily basis and couldn’t live without it at this point so we feel it only fair to give something back.

Thanks,

Jason