I want to share with you what Sonatype is planning to do with Hudson. 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 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 interested in Maven integration. Tom made the PluginManager itself pluggable and the Plexus version of the PluginManager 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. 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 these systems.
With the Plexus integration we have for Hudson, we can now leverage any of the components created for Continuum (Continuum was probably the first Plexus application). 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, let's take Emma as an example.
We have started working 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 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 many Hudson plugins essentially duplicate many of the Maven plugins that exist, because it wasn't a huge change we made to collect data, rather than produce 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 as a bundle inside an OSGi environment. I don't know how popular OSGi will be, as runtime for applications has its great parts, but also serious detractions. What is certain is that OSGi rules on the developer desktop with Eclipse, so we have taken that into account and need to ensure that the tools we produce work equally well in Maven and Eclipse. We also feel Hudson rules in the arena of build automation, so we're focusing on what we believe is an ideal set of tools consisting of Maven, Nexus, Hudson, and Eclipse, and 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 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 to help 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 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 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 familiar with Nexus, we want to integrate the security systems, and we want to create a UI for Hudson based on ExtJS. These parts are also welcome 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 integrated with Nexus, tools for the automatic provisioning of build nodes and custom data collections tools, and create what we think is a pretty cool dashboard idea.
Happy to answer any questions, and if people want the work we've slated for OSS, we are more than happy to contribute it. We use Hudson daily and couldn't live without it at this point, so we feel it is only fair to give something back.
Jason is a co-founder and the former CTO of Sonatype.
Explore All Posts by Jason van ZylTags
Try Nexus Repository Free Today
Sonatype Nexus Repository is the world’s most trusted artifact repository manager. Experience the difference and download Community Edition for free.