<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sonatype Blog &#187; Community</title>
	<atom:link href="http://blog.sonatype.com/people/tag/community/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sonatype.com/people</link>
	<description>Sonatype is transforming software development with tools, information and services that enable organizations to build better software, faster, using open-source components.</description>
	<lastBuildDate>Thu, 16 May 2013 18:53:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Join Us: Nexus Office Hours &#8212; This Friday!</title>
		<link>http://blog.sonatype.com/people/2013/04/join-us-nexus-office-hours-this-friday/</link>
		<comments>http://blog.sonatype.com/people/2013/04/join-us-nexus-office-hours-this-friday/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 12:03:22 +0000</pubDate>
		<dc:creator>Emily Blades</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Nexus Office Hours]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=13253</guid>
		<description><![CDATA[Wondering what&#8217;s new in Nexus? Just ask the experts. We&#8217;re hosting another Nexus Office Hours this Friday, on Google+ Hangout On Air. Our Nexus experts Brian Fox, Manfred Moser and Rich Seddon will demo the latest in Nexus and dedicate most of the hour to Q&#38;A time with you! How to join: No registration required, [...]]]></description>
				<content:encoded><![CDATA[<h3><strong></strong><a href="http://www.sonatype.com/people/2013/04/join-us-nexus-office-hours-this-friday/screen-shot-2013-04-23-at-6-54-44-am-2/" rel="attachment wp-att-13265"><img class="aligncenter size-full wp-image-13265" title="Screen shot 2013-04-23 at 6.54.44 AM" src="http://www.sonatype.com/people/wp-content/uploads/2013/04/Screen-shot-2013-04-23-at-6.54.44-AM1.png" alt="" width="696" height="235" /></a></h3>

<h3>Wondering what&#8217;s new in Nexus? Just ask the experts.</h3>

<p>We&#8217;re hosting another <a href="https://plus.google.com/u/0/b/117596333621717490325/events/c0rgc97eam66k7hpqss4q87bn28" target="_blank">Nexus Office Hours</a> this Friday, on Google+ Hangout On Air. Our <a href="http://www.sonatype.com/Products/Nexus-Professional" target="_blank">Nexus</a> experts Brian Fox, Manfred Moser and Rich Seddon will demo the latest in Nexus and dedicate most of the hour to Q&amp;A time with you!</p>

<p><strong>How to join:</strong> No registration required, just <a href="https://plus.google.com/u/0/b/117596333621717490325/events/c0rgc97eam66k7hpqss4q87bn28" target="_blank">RSVP on Google+</a>, and the event will appear in your calendar. You can join through your calendar invite or by returning to the event page at the start of the hangout. Be sure to bring your Nexus questions with you. If you can&#8217;t make it &#8212; be sure to leave your questions on the event page in the comments section and we&#8217;ll be sure to answer them during the session. That way you can tune into the recording later, and get your answers!</p>

<p>*Interested in joining our panel that day in the video conference? Sign up for one of the spots on our panel, by leaving us a comment on the event page and we&#8217;ll invite you in before we go live. Space is limited, so be sure to sign up early!</p>

<p>Please feel free to pass along this invite to your friends and colleagues.</p>

<p><a href="https://plus.google.com/u/0/b/117596333621717490325/events/c0rgc97eam66k7hpqss4q87bn28" target="_blank"><strong>RSVP</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2013/04/join-us-nexus-office-hours-this-friday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Join Us: Nexus Office Hours &#8211; Friday, March 22, 2013 1PM-2PM EDT</title>
		<link>http://blog.sonatype.com/people/2013/03/join-us-nexus-office-hours-friday-march-22-2013-1pm-2pm-edt/</link>
		<comments>http://blog.sonatype.com/people/2013/03/join-us-nexus-office-hours-friday-march-22-2013-1pm-2pm-edt/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 15:36:40 +0000</pubDate>
		<dc:creator>Emily Blades</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Webinar]]></category>
		<category><![CDATA[Nexus Office Hours]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=13015</guid>
		<description><![CDATA[Wondering what&#8217;s new in Nexus? Wishing you had a chance to ask some of our Nexus experts about Nexus best practices? Here&#8217;s your chance. We&#8217;re pleased to announce that Sonatype will be hosting Nexus Office Hours each month starting in March! Our Nexus experts Brian Fox, Manfred Moser and Rich Seddon will demo the latest [...]]]></description>
				<content:encoded><![CDATA[<p>Wondering what&#8217;s new in Nexus? Wishing you had a chance to ask some of our Nexus experts about Nexus best practices? Here&#8217;s your chance.</p>

<p>We&#8217;re pleased to announce that Sonatype will be hosting <a href="https://plus.google.com/u/0/b/117596333621717490325/events/cstc3ac2ijh0a97s9snqqjrpsrg" target="_blank">Nexus Office Hours</a> each month starting in March! Our Nexus experts Brian Fox, Manfred Moser and Rich Seddon will demo the latest Nexus tips &amp; tricks and will take real-time questions from you!</p>

<p><strong>When:</strong> Friday, March 22, 2013 &#8211; 1:00-2:00PM EDT (GMT-0400)</p>

<p><strong>Where:</strong> In a Google+ Hangout On Air! Once we begin, our hangout will broadcast live to the <a href="https://plus.google.com/u/0/b/117596333621717490325/events/cstc3ac2ijh0a97s9snqqjrpsrg" target="_blank">Nexus Office Hours event page </a>on Google+, as well as our Sonatype YouTube channel.</p>

<p><strong>How:</strong> Be sure to <a href="https://plus.google.com/u/0/b/117596333621717490325/events/cstc3ac2ijh0a97s9snqqjrpsrg" target="_blank">RSVP &#8216;Yes&#8217;</a> on the Nexus Office Hours event page, and this event will be automatically saved to your Gmail calendar and you will receive a reminder just before we start the hangout. Not on Google+? No worries, you can still view the broadcast on the event page or the Sonatype YouTube channel when the hangout begins.</p>

<p>We will be taking real-time questions submitted on the Nexus Office Hours event page, Twitter (please use hashtag #nexusofficehours) and on our YouTube page in the comments section of the broadcast.</p>

<p>**If you&#8217;d like to join our panel that day in the hangout, please leave us a comment on this page and the first 6 people will be invited in as the session starts. This event will be recorded and saved to Google+ as well as our YouTube channel.</p>

<p><strong><a href="https://plus.google.com/u/0/b/117596333621717490325/events/cstc3ac2ijh0a97s9snqqjrpsrg" target="_blank">RSVP Now</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2013/03/join-us-nexus-office-hours-friday-march-22-2013-1pm-2pm-edt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nexus Stories From Across The Globe</title>
		<link>http://blog.sonatype.com/people/2012/05/nexus-stories-from-across-the-globe/</link>
		<comments>http://blog.sonatype.com/people/2012/05/nexus-stories-from-across-the-globe/#comments</comments>
		<pubDate>Thu, 03 May 2012 12:38:02 +0000</pubDate>
		<dc:creator>Emily Blades</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Nexus]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=11120</guid>
		<description><![CDATA[With nearly 19,000 active instances of Nexus around the world, we thought we would reach out and ask the community to share their Nexus stories and experiences with us. Over the last six weeks we held our Nexus Stories Contest and we were blown away by the tremendous response we received from around the globe. [...]]]></description>
				<content:encoded><![CDATA[<p><a rel="attachment wp-att-11136"><img class="aligncenter size-full wp-image-11136" title="blog_header_NexusStories-1" src="http://www.sonatype.com/people/wp-content/uploads/2012/05/blog_header_NexusStories-1.png" alt="" width="700" height="200" /></a></p>

<p>With nearly 19,000 active instances of Nexus around the world, we thought we would reach out and ask the community to share their Nexus stories and experiences with us. Over the last six weeks we held our Nexus Stories Contest and we were blown away by the tremendous response we received from around the globe.</p>

<p>Thank you to all of you who took the time to participate. We hope you are all enjoying your wicked awesome Nexus mugs! As promised, we will be sharing your Nexus stories on our blog over the coming weeks.</p>

<p>After the overwhelming response we received, we decided drawing one grand prize winner just wasn&#8217;t good enough (plus we love to take advantage of Jason every chance we get). So we decided to draw three grand prize winners!  Our three lucky winners will each be receiving one day of onsite consulting with Jason van Zyl. Our grand prize winners are:</p>

<ul>
    <li>Alexis Morelle, Colombes, France</li>
    <li>Rueben Jimenez, San Francisco, CA</li>
    <li>Henry Hughes, Los Angeles, CA</li>
</ul>

<p>Congratulations to our winners and thanks again to everyone who participated!</p>

<p>Stay tuned next week, when we will be sharing some of your stories on what life was like, before Nexus.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2012/05/nexus-stories-from-across-the-globe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bringing Java and Linux together on the way to Continuous Live Deployment</title>
		<link>http://blog.sonatype.com/people/2011/11/bringing-java-and-linux-together-on-the-way-to-continuous-live-deployment/</link>
		<comments>http://blog.sonatype.com/people/2011/11/bringing-java-and-linux-together-on-the-way-to-continuous-live-deployment/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 16:38:12 +0000</pubDate>
		<dc:creator>Sebastian Herold</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Guest]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=9581</guid>
		<description><![CDATA[Today we have a guest post from Sebastian Herold, a software architect at ImmobilienScout24, the largest German online marketplace for real estate. Sebastian and his team created a YUM plugin for Nexus to better interface between the Java and Linux worlds. &#160; In 2010 we switched our build infrastructure to Apache Maven, Sonatype Nexus and [...]]]></description>
				<content:encoded><![CDATA[<div><em>Today we have a guest post from Sebastian Herold, a software architect at ImmobilienScout24, the largest German online marketplace for real estate. Sebastian and his team created a YUM plugin for Nexus to better interface between the Java and Linux worlds.</em>
<em><span id="more-9581"></span></em>
&nbsp;

In 2010 we switched our build infrastructure to Apache Maven, Sonatype Nexus and JetBrains TeamCity.  We then focused on the other side of our delivery pipeline, deployment. Linux package managers, like RPM, bring everything you need: compression, cleanup, unique file ownership, install/post-install scripts and fine-grained dependency management. We thought, why not deploy Java applications via RPM to our Linux-based data centers?

We knew that the <a href="http://mojo.codehaus.org/rpm-maven-plugin/">RPM Maven Plugin</a> made it easy to build an RPM in Maven’s package phase and to register it as a project artifact. <a rel="attachment wp-att-9583" href="http://www.sonatype.com/people/2011/11/bringing-java-and-linux-together-on-the-way-to-continuous-live-deployment/cld-at-is24/"><img class="alignright size-full wp-image-9583" title="Development Infrastructure using Linux and Nexus" src="http://www.sonatype.com/people/wp-content/uploads/2011/11/CLD-at-IS24.png" alt="Development Infrastructure using Linux and Nexus" width="329" height="222" /></a>With the help of Maven it would be automatically deployed to Nexus. The only question we had was how to transform Nexus Maven repositories into YUM repositories.  In case you didn’t know, YUM is an automatic updater and package installer/remover for RPM systems.

Nexus is open source, so we decided to build a plugin. The design was quite easy. We just listen to <em>RepositoryItemEventStore</em> and every time we detect that an RPM package gets stored, we execute the Linux command <em>createrepo</em> to generate the YUM repository. This works out very well for us. Nexus repository URLs like <span style="text-decoration: underline;">http://nexus:8081/nexus/content/repositories/releases</span> also become YUM repository urls in your <em>/etc/yum.repos.d/*.repo</em> files.  In combination with TeamCity and a cronjob doing <em>YUM upgrades</em> every minute on the production servers, Continuous Live Deployment (CLD) becomes a simple task of configuring the right URLs.  Of course, it’s not quite that simple as I’ve skipped the details.  If you want to learn more about our architecture, you can check out this <a title="Continuous Deployment Presentation" href="http://velocityconf.com/velocityeu/public/schedule/detail/21669" target="_blank">presentation</a> from one of my colleagues.

<em>
</em>

</div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2011/11/bringing-java-and-linux-together-on-the-way-to-continuous-live-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to publish your Gradle project to the Central Repository</title>
		<link>http://blog.sonatype.com/people/2011/11/how-to-publish-your-gradle-project-to-the-central-repository/</link>
		<comments>http://blog.sonatype.com/people/2011/11/how-to-publish-your-gradle-project-to-the-central-repository/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 15:37:38 +0000</pubDate>
		<dc:creator>Terry Bernstein</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Gradle]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=9514</guid>
		<description><![CDATA[Sonatype makes it easy to add your projects to the Central Repository with a free, public hosting service called OSSRH, that we recently wrote about here.  Many developers have found this a very useful service and easy to use with Apache Maven.  However, if you&#8217;ve started using Gradle, you may have wondered if you could [...]]]></description>
				<content:encoded><![CDATA[<p>Sonatype makes it easy to add your projects to the <a title="Central Repository" href="http://search.maven.org/">Central Repository</a> with a free, public hosting service called OSSRH, that we recently wrote about <a title="Blog on Sonatype OSSRH" href="http://www.sonatype.com/people/2011/10/publishing-your-artifacts-to-the-central-repository/">here</a>.  Many developers have found this a very useful service and easy to use with Apache Maven.  However, if you&#8217;ve started using Gradle, you may have wondered if you could continue using the service.  The answer is absolutely YES.</p>

<p>We were talking about creating a guide for this, but someone in the community beat us to it.  Yennick Trevels published an excellent guide in his blog that you can find <a href="http://jedicoder.blogspot.com/2011/11/automated-gradle-project-deployment-to.html">here</a>.  We highly recommend checking out his post if you want to use Gradle to deploy artifacts to the Central Repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2011/11/how-to-publish-your-gradle-project-to-the-central-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our Focus on Advancing Hudson and Making Great Software</title>
		<link>http://blog.sonatype.com/people/2011/02/our-focus-on-advancing-hudson-and-making-great-software/</link>
		<comments>http://blog.sonatype.com/people/2011/02/our-focus-on-advancing-hudson-and-making-great-software/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 02:48:02 +0000</pubDate>
		<dc:creator>Wayne Jackson</dc:creator>
				<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=7277</guid>
		<description><![CDATA[Sonatype’s perspective regarding the Hudson Project is pretty simple: we have been and will continue to be committed to advancing Hudson and making better software available to the community of Hudson users. Very recently, Sonatype completed significant development in the evolution of Hudson&#8217;s core architecture. The benefits of these changes include better leveraging of industry [...]]]></description>
				<content:encoded><![CDATA[<p><!--dzoneZ=none-->Sonatype’s perspective regarding the Hudson Project is pretty simple: we have been and will continue to be committed to advancing Hudson and making better software available to the community of Hudson users.</p>

<p>Very recently, Sonatype completed significant development in the evolution of Hudson&#8217;s core architecture. The benefits of these changes include better leveraging of industry standards, increased performance and stability, and tight integration with Maven 3 that provides greater visibility into running builds. We are continuing to add engineers to our Hudson team and are working hard with the Hudson community to move much of the work we&#8217;ve done here to Java.net.</p>

<p>Our work on Hudson is consistent with Sonatype’s long history of investment and community support. Our work with Maven at the Apache Software Foundation, with m2eclipse at the Eclipse Foundation, and with Nexus (our open source repository manager) all underscore our commitment to innovation for open source and commercial users alike.</p>

<p>Are we a commercial enterprise? Absolutely. However, our track record of open source innovation and community contribution speaks for itself. At Sonatype, we&#8217;ve always focused on the code, and that&#8217;s where we&#8217;re focused today with Hudson.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2011/02/our-focus-on-advancing-hudson-and-making-great-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Next Generation Maven Development Stack @ JFokus</title>
		<link>http://blog.sonatype.com/people/2010/01/next-generation-maven-development-stack/</link>
		<comments>http://blog.sonatype.com/people/2010/01/next-generation-maven-development-stack/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 05:21:05 +0000</pubDate>
		<dc:creator>Jason van Zyl</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[guice]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[jfokus]]></category>
		<category><![CDATA[peaberry]]></category>
		<category><![CDATA[polyglot]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=4113</guid>
		<description><![CDATA[For my talk today at JFokus today I&#8217;ve taken the liberty of starting some notes for folks interested in attending. There&#8217;s a lot to cover and so I thought I would try the approach of providing some material up front so the session can be more of a dialog. I&#8217;m going to attempt to cover [...]]]></description>
				<content:encoded><![CDATA[<p>For my talk today at JFokus today I&#8217;ve taken the liberty of starting some notes for folks interested in attending. There&#8217;s a lot to cover and so I thought I would try the approach of providing some material up front so the session can be more of a dialog. I&#8217;m going to attempt to cover everything in the picture below and save the demos folks might want to see for the Sonatype booth. Happy to chat with folks and do any demos before and after the presentation. Just stop by!</p>

<p><img src="http://www.sonatype.com/people/wp-content/uploads/2010/01/Stack1.png" alt="Stack.png" border="0" /></p>

<h3>Maven Stack Infrastructure</h3>

<p>I&#8217;m going to talk about some of the under pinnings of the technologies we&#8217;re using as part of our Maven work. Why we selected the technologes and some of the current work that&#8217;s happening.
<span id="more-4113"></span></p>

<ul>
<li><a href="http://code.google.com/p/google-guice/">Guice</a></li>
<li><a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/">From Plexus to Guice (#1): Why Guice?</a></li>
<li><a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-2-the-guiceplexus-bridge-and-custom-bean-injection/">From Plexus to Guice (#2): The Guice/Plexus Bridge and Custom Bean Injection</a></li>
<li><a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-3-creating-a-guice-bean-extension-layer/">From Plexus to Guice (#3): Creating a Guice Bean Extension Layer</a></li>
<li><a href="http://code.google.com/p/peaberry/">Peaberry</a></li>
<li><a href="http://incubator.apache.org/shiro/">Apache Shiro</a></li>
<li><a href="http://enunciate.codehaus.org/">Enunciate</a></li>
</ul>

<h3>Maven</h3>

<p>There are several develops going on in the various Maven projects. Maven 3.x is on the way, but we have some very interesting work happing with OSGi within our Tycho project. The Flexmojos project and NAR (the C/++ framework for Maven) are also popular.</p>

<h4>Tycho</h4>

<ul>
<li><a href="http://tycho.sonatype.org/">Tycho Site</a></li>
<li><a href="http://github.com/sonatype/sonatype-tycho">Tycho @ Github</a></li>
<li><a href="http://github.com/sonatype/m2eclipse-tycho">Tycho/PDE Integration</a></li>
<li><a href="http://wiki.eclipse.org/Equinox_p2">P2 Site</a></li>
</ul>

<h4>Flexmojos</h4>

<ul>
<li><a href="http://flexmojos.sonatype.org/">Flexmojos Site</a></li>
</ul>

<h4>NAR</h4>

<ul>
<li><a href="http://duns.github.com/maven-nar-plugin/">NAR Site</a></li>
<li><a href="http://github.com/sonatype/maven-nar-plugin">NAR @ Github</a></li>
</ul>

<h3>M2Eclipse</h3>

<p>The primary IDE integration we work on at Sonatype. The most important thing to talk about in M2Eclipse is the configuration framework.</p>

<ul>
<li><a href="http://m2eclipse.sonatype.org/">M2Eclipse Site</a></li>
</ul>

<h3>Hudson</h3>

<p>Most of the work we&#8217;ve been doing on Hudson is still not really good enough for public consumption but we&#8217;re testing the changes we&#8217;re making on the Sonatype grid.</p>

<p><a href="https://hudson.dev.java.net/">Hudson Site</a></p>

<h3>Nexus</h3>

<ul>
<li><a href="http://nexus.sonatype.org">Nexus Site</a></li>
<li><a href="http://www.sonatype.com/people/2010/01/nexus-oss-ecosystem/">Nexus: Improving Maven Central and Supporting the Maven Ecosystem</a></li>
<li><a href="http://www.sonatype.com/people/2010/01/10-questions/">Selecting OSS Software: 10 Questions Answered for Sonatype Nexus</a></li>
<li><a href="http://nexus.sonatype.org/oss-repository-hosting.html">OSS Repository Hosting</a></li>
<li><a href="http://bundles.sonatype.org/index.html#welcome">OSGi Central</a></li>
<li>Ruby Central (We&#8217;re working on making that publicly available</li>
</ul>

<h3>Proviso</h3>

<p>Proviso is not publicly released yet, but Alin and I have been working together to get our provisioning framework ready for a public release.</p>

<h3>Git</h3>

<p>We are starting to use Git heavily and soon likely exclusively. We are helping out on the EGit, and JGit projects at Eclipse and we&#8217;re trying to put a little Git server together based on JGit, MINA, and Apache Shiro.</p>

<ul>
<li><a href="http://www.eclipse.org/jgit/">JGit Site</a></li>
<li><a href="http://www.eclipse.org/egit/">EGit Site</a></li>
<li><a href="http://aniszczyk.org/2010/01/25/egit-and-jgit-builds-available/">Tycho building EGit/JGit</a></li>
<li><a href="http://github.com/sonatype/sshjgit">SShJGit @ Github</a></li>
</ul>

<h3>Maven Extensions</h3>

<p>I&#8217;ll chat about these in the talk.</p>

<ul>
<li><a href="http://polyglot.sonatype.org/">Polyglot Maven Site</a></li>
<li><a href="http://github.com/sonatype/polyglot-maven">Polyglot Maven @ Github</a></li>
<li><a href="http://mvnsh.sonatype.org">Maven Shell</a></li>
<li><a href="https://github.com/sonatype/mvnsh">Maven Shell @ Github</a></li>
</ul>

<p>I&#8217;ll likely keep adding to the entry leading up the talk, but I thought I would get the ball rolling!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/01/next-generation-maven-development-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meet the Nexus Remote Repository Browsing Plugin</title>
		<link>http://blog.sonatype.com/people/2010/01/meet-the-nexus-remote-repository-browsing-plugin/</link>
		<comments>http://blog.sonatype.com/people/2010/01/meet-the-nexus-remote-repository-browsing-plugin/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 05:10:22 +0000</pubDate>
		<dc:creator>Anders Hammar</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=4084</guid>
		<description><![CDATA[Having used Nexus since it was a beta release and having also written a Plexus component-style Nexus plugin (the nexus-ldap realm), I was curious about the new Nexus Plugin API introduced in Nexus 1.4.0. To try it out, I asked two of our developers here at Devoteam Sweden to develop the Nexus Remote Repository Browsing [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/nexus-small.png"><img class="alignright size-full wp-image-3683" title="nexus-small" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/nexus-small.png" alt="" width="250" height="62" /></a>Having used Nexus since it was a beta release and having also written a Plexus component-style Nexus plugin (the nexus-ldap realm), I was curious about the new Nexus Plugin API introduced in Nexus 1.4.0. To try it out, I asked two of our developers here at <a href="http://www.devoteam.se/">Devoteam Sweden</a> to develop the Nexus Remote Repository Browsing Plugin &#8211; a Nexus plugin that makes it possible to directly browse the remote Maven repository of a proxy repository within the Nexus UI. The plugin has been contributed to Nexus OSS and will be released as a part of the upcoming 1.5.0 release.  In this blog post, I will talk a little bit about the plugin and its use case.<span id="more-4084"></span></p>

<p>In the Repository panel of Nexus, there are two tabs for browsing artifacts. The first one is called “Browse Storage” and is used to browse all artifacts stored/cached locally by the Nexus instance. For a hosted repository, the tree displayed under &#8220;Browse Storage&#8221; will contain all available artifacts. For a proxy repository, you will only find those artifacts that have been cached due to earlier requests. The second tab, “Browse Index”, allows you to browse artifacts through the repository’s index.  If the remote repository provides an up-to-date index and you have configured Nexus to download this remote index, all of the artifacts in the remote repository will be visible under the &#8220;Browse Index&#8221; tab.   While the &#8220;Browse Index&#8221; tab works for all of the major public Maven repositories, it doesn&#8217;t allow you to browse remote repositories which do not publish a Nexus index.</p>

<p>This is where the Nexus Remote Repository Browsing Plugin (nexus-rrb-plugin) comes into play. The plugin adds a third browsing tab for proxy repositories, the “Browse Remote” tab. In this tab, it is possible to browse the actual remote repository from within the Nexus UI. Below you find a screen shot of the new tab.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/rrb-plugin1.png"><img class="aligncenter size-full wp-image-4091" title="rrb-plugin" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/rrb-plugin1.png" alt="" width="622" height="461" /></a></p>

<p>Before this plugin, the user was forced to browse the remote repository in a separate browser window. Not only is this inconvenient, but for many users it is not possible as the URL of the remote repository is normally only visible to administrators. Also, the connection to the remote repository will be initiated from the Nexus instance. The benefit of this is that it will work even if your network setup prevents direct access from the clients to the remote repository.</p>

<p>This first version of the plugin doesn&#8217;t add any bells and whistles to the browsing. The tab is added to all proxy repositories and is available to all users. However, it does support browsing of Maven repositories at S3, such as the SpringSource repository.  This ability to browse a repository hosted on S3 is significant as it is tricky to do this via a normal web browser.</p>

<p>As mentioned above, the nexus-rrb-plugin is included as a core plugin in the upcoming Nexus 1.5.0 release.   This means that it will be available as a part of the core Nexus OSS offering.   Once Nexus 1.5.0 is released, please try it out and use the <a href="https://issues.sonatype.org/browse/NEXUS">issue tracker</a> for reporting any problems you run into and enhancements you would like to see &#8211; we’re especially interested in hearing about repositories that the plugin cannot handle! Questions and discussions may be posted to the <a href="http://nexus.sonatype.org/project-information.html">Nexus mailing list</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/01/meet-the-nexus-remote-repository-browsing-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Plexus to Guice (#2): The Guice/Plexus Bridge and Custom Bean Injection</title>
		<link>http://blog.sonatype.com/people/2010/01/from-plexus-to-guice-2-the-guiceplexus-bridge-and-custom-bean-injection/</link>
		<comments>http://blog.sonatype.com/people/2010/01/from-plexus-to-guice-2-the-guiceplexus-bridge-and-custom-bean-injection/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 08:00:05 +0000</pubDate>
		<dc:creator>Stuart McCulloch</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[pom]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=3947</guid>
		<description><![CDATA[In the next few articles of the &#8220;Plexus to Guice&#8221; series I will look at the modular design of our replacement Plexus container and show how you can configure a POB (Plain Old Bean) from Guice with a simple code example. In the first article of this series, Jason discussed the need to move to [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/from-plexus-to-guice1.png"><img class="alignright size-full wp-image-4024" title="from-plexus-to-guice" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/from-plexus-to-guice1.png" alt="" width="250" height="62" /></a>In the next few articles of the &#8220;Plexus to Guice&#8221; series I will look at the modular design of our replacement Plexus container and show how you can configure a POB (Plain Old Bean) from Guice with a simple code example.   In the <a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/">first article</a> of this series, Jason discussed the need to move to a more widely used and support container, and the reasons why we chose to standardize on Guice.   As we migrate more Plexus-based applications (such as Maven) to Guice, we still to maintain backward-compatibility for all of the plugins and extensions which were developed using Plexus.  In this post, I start to discuss the scope and initial efforts to create something we&#8217;re calling the Guice/Plexus &#8220;shim&#8221;.   It is a library, a &#8220;container&#8221; that was developed to allow existing Plexus components to use Guice under the hood without any modification. <span id="more-3947"></span></p>

<h3>Scope, Architecture, and Conventions</h3>

<p>Our goal is to create a swap-in replacement for <a href="http://plexus.codehaus.org/plexus-containers/plexus-container-default/">Plexus</a> built on top of <a href="http://code.google.com/p/google-guice/">Guice</a>. Ideally this should be done without changing the core Guice code, but if this is not possible then any fixes or new functionality should be written up and reported on the Guice <a href="http://code.google.com/p/google-guice/issues/list">issues</a> page.   While there is no guarantee that these changes will make it into an official Guice release, improvements that benefit a wider audience should have a better chance of making it into Guice.</p>

<p>Sonatype currently maintains a <a href="http://svn.sonatype.org/spice/trunk/spice-inject/guice-patches">patched build</a> of Guice trunk with the following major patches:</p>

<ul>
    <li><a href="http://code.google.com/p/google-guice/issues/detail?id=436">Provide access to Guice&#8217;s own internal TypeConverters</a></li>
    <li><a href="http://code.google.com/p/google-guice/issues/detail?id=343">BytecodeGen and related AOP / bridge classloader fixes</a></li>
</ul>

<p>This build also contains some experimental changes which have not yet been written up because they are still being tested:</p>

<ul>
    <li>ability to turn off validation error about using @Singleton on an interface instead of an implementation class</li>
    <li>ability to turn off creation of parent JIT bindings when using child injectors (simplified version of <a rel="nofollow" href="http://code.google.com/p/google-guice/issues/detail?id=342">this issue</a>)</li>
</ul>

<h3>Guice/Plexus Integration Module Architecture</h3>

<p>The solution is separated into re-usable, pluggable modules that together provide a replacement for the existing Plexus container. There is also an artifact that combines these modules into a single JAR, as this would make it easier to swap between the old and new container. Each module has a specific responsibility and any dependencies between modules is kept at a minimum.   The following is a list of the components or modules that comprise the Guice/Plexus integration project.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/guice-plexus-shim.png"><img class="size-full wp-image-3951 alignright" title="guice-plexus-shim" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/guice-plexus-shim.png" alt="" width="337" height="301" /></a></p>

<dl> <dt>guice-bean-inject</dt> <dd>Extends Guice to support customized injection of named properties (fields and setter methods).</dd> <dt>guice-bean-reflect</dt> <dd>Provides utility methods and support code for reflection, bean properties, and resource scanning.</dd> <dt>guice-plexus-metadata</dt> <dd>Shared metadata interfaces, runtime implementations of Plexus annotations, and collection adapters.</dd> <dt>guice-plexus-scanners</dt> <dd>Annotation and XML scanners that provide metadata about components, requirements, and configuration.</dd> <dt>guice-plexus-converters</dt> <dd>Standard Plexus type conversion rules that can create instances from simple strings and XML markup.</dd> <dt>guice-plexus-locators</dt> <dd>Guice based registry that can locate components of a certain type, optionally ordered by name hints.</dd> <dt>guice-plexus-bindings</dt> <dd>Guice <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Module.html">module</a> that uses: scanners to find and bind Plexus component beans, converters to turn configurations into instances, and locators to find components based on requirements. This component also provides a simple lifecycle management API.</dd> <dt>guice-plexus-shim</dt> <dd>Creates an <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Injector.html">injector</a> with Plexus bean support, adds Plexus lifecycles, and provides the container API.</dd> </dl>

<h2>A Brief introduction to Guice and JSR330</h2>

<p><a rel="nofollow" href="http://code.google.com/p/google-guice/">Guice</a> is a <a rel="nofollow" href="http://martinfowler.com/articles/injection.html">Dependency Injection</a> framework that injects constructors, methods, and fields annotated with @Inject. Guice recognizes both the <a rel="nofollow" href="http://atinject.googlecode.com/svn/trunk/javadoc/javax/inject/Inject.html">JSR 330</a> and the original <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Inject.html">Guice</a> form of this annotation.</p>

<p>Every injection point (constructor, method, or field) has a number of dependencies, each one represented by a key: the type to be injected plus an optional qualifier annotation that lets you choose between different implementations of the same type. For example:</p>

<div>
<div>
<pre>public class Car {
   // Injectable constructor
   @Inject public Car(Engine engine) { ... }

   // Injectable field
   @Inject @Named("Corinthian Leather") private Seat seat;

   // Injectable package-private method
   @Inject void install(Windshield windshield, Trunk trunk) { ... }
}</pre>
</div>
</div>

<p>Has the following injection points and dependency keys:</p>

<div>
<div>
<pre>Constructor      ---&gt; Key[ Engine ]
Field "seat"     ---&gt; Key[ Seat, @Named( "Corinthian Leather" ) ]
Method "install" ---&gt; Key[ Windshield ], Key[ Trunk ]</pre>
</div>
</div>

<p>The Guice injector maintains a set of bindings that map dependency keys to <a rel="nofollow" href="http://atinject.googlecode.com/svn/trunk/javadoc/javax/inject/Provider.html">providers</a> that supply instances of the key type. These providers may use different strategies to supply instances: per-lookup, singleton, per-conversation, even your own custom strategies.</p>

<p>When you configure Guice you are registering bindings from one key to another, or between keys and providers:</p>

<div>
<div>
<pre>// Key[ Seat ] ---&gt; Key[ FoamSeatImpl ]
bind( Seat.class ).to( FoamSeatImpl.class );

// Key[ Seat, @Named( "Corinthian Leather" ) ] ---&gt; Key[ LeatherSeatImpl ]
bind( Seat.class ).annotatedWith( Names.named( "Corinthian Leather" ) ).to( LeatherSeatImpl.class );

// Key[ Engine ] ---&gt; Key[ V8EngineImpl ]
bind( Engine.class ).to( V8EngineImpl.class );

// Key[ V8EngineImpl ] ---&gt; Provider[ V8EngineImpl, "singleton" ]
bind( V8EngineImpl.class ).in( Singleton.class );

// Key[ Windshield ] ---&gt; Provider[ Windshield, "custom" ]
bind( Windshield.class ).toProvider( WindshieldProvider.class );

// Key[ Trunk ] ---&gt; Provider[ TrunkImpl, "constant" ]
bind( Trunk.class ).toInstance( new TrunkImpl() );</pre>
</div>
</div>

<p>The injector can also create certain types of bindings on-demand when no such explicit binding already exists, such as:</p>

<div>
<div>
<pre>// Key[ FoamSeatImpl ] ---&gt; Provider[ FoamSeatImpl , "per-lookup" ]
// Key[ LeatherSeatImpl] ---&gt; Provider[ LeatherSeatImpl, "per-lookup" ]</pre>
</div>
</div>

<div>
<table><colgroup> <col width="24"></col> <col></col> </colgroup>
<tbody>
<tr>
<td valign="top"><img src="https://docs.sonatype.com/images/icons/emoticons/information.gif" border="0" alt="" width="16" height="16" align="absmiddle" /></td>
<td>The <tt>Key[...]</tt> and <tt>Provider[...]</tt> markup is pseudo-code</td>
</tr>
</tbody>
</table>
</div>

<p>So far so good, but what if you have classes that don&#8217;t mark dependencies with <tt>@Inject</tt>? What if they&#8217;re identified in XML or marked with custom annotations like <tt>@Requirement</tt> or <tt>@Configuration</tt>?</p>

<h2>TypeListeners, MembersInjectors, and InjectionListeners</h2>

<p>Since 2.0 Guice has provided a way to supplement the core injection process with your own <a rel="nofollow" href="http://code.google.com/p/google-guice/wiki/CustomInjections">custom injections</a>. Here&#8217;s what you need to do:</p>

<ol>
    <li>Register your custom <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/spi/TypeListener.html">TypeListener</a>, using a <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/matcher/Matcher.html">Matcher</a> to filter the specific types you are interested in, or <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/matcher/Matchers.html">Matchers.any()</a> if you want to process all types</li>
    <li>Guice will call your TypeListener once for each type that matches your chosen matcher, passing you a <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/spi/TypeEncounter.html">TypeEncounter</a></li>
    <li>You can then analyze the type to be injected, prepare any custom injection data, and use the TypeEncounter to register a<a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/MembersInjector.html">MembersInjector</a> or <a rel="nofollow" href="http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/spi/InjectionListener.html">InjectionListener</a> for this type. Because the TypeListener is called per-type, and not per-instance, you should try to do as much preparation work here as possible to avoid spending too much time in the MembersInjector or InjectionListener</li>
    <li>Guice will call your MembersInjector once for each instance it injects, after it has performed the core injection. You can then use the data prepared by your TypeListener to perform any custom injection</li>
    <li>Finally Guice will call your InjectionListener once for each instance it injects, after all injections are complete. This is where you can hook in management code, such as start and stop life-cycle support</li>
</ol>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/custom-injection.png"><img class="aligncenter size-full wp-image-4032" title="custom-injection" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/custom-injection.png" alt="" width="349" height="301" /></a></p>

<p>You&#8217;ll notice that Guice does not dictate how each type should be scanned or prepared for custom injection. While Guice does provide utility methods that can tell you which class members are annotated with @Inject, there&#8217;s no general-purpose mechanism to scan class members looking for custom annotations. On the one hand this is good, because it avoids bloating the core JAR with code you might not need. But on the other hand each custom injection client could end up implementing similar scanning code again and again. The recommended approach is to put optional code like this in an extension library that people can use if they need to, rather than keep folding it into the core.</p>

<p>We&#8217;re going to use custom injection to support Plexus components whose dependencies may be annotated or configured in XML. Plexus components are similar to Java beans in that they can have fields or setter methods, so rather than write a custom injector that&#8217;s closely tied to Plexus let&#8217;s see if we can develop an extension library for &#8220;beans&#8221; in general. That way we can build support for Plexus on top of it, and allow people to re-use it for other bean-style injections.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/01/from-plexus-to-guice-2-the-guiceplexus-bridge-and-custom-bean-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Plexus to Guice (#1): Why Guice?</title>
		<link>http://blog.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/</link>
		<comments>http://blog.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 19:00:55 +0000</pubDate>
		<dc:creator>Jason van Zyl</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[guice]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[peaberry]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=3970</guid>
		<description><![CDATA[When we started the Maven project, dependency injection was still developing. Spring was just starting out and the Avalon project at Apache was really the only IoC framework around. While the concept seems second-nature by 2010, in 2002, it wasn&#8217;t a primary focus of the initial efforts of the Maven community but it was something [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/from-plexus-to-guice1.png"><img class="alignright size-full wp-image-4024" title="from-plexus-to-guice" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/from-plexus-to-guice1.png" alt="" width="250" height="62" /></a>When we started the Maven project, dependency injection was still developing. Spring was just starting out and the Avalon project at Apache was really the only IoC framework around. While the concept seems second-nature by 2010, in 2002, it wasn&#8217;t a primary focus of the initial efforts of the Maven community but it was something I felt had to be in place for the development of Maven 2. We knew we needed some sort of component framework, some standard mechanism to instantiate plugins and configure them based on a set of configuration points, and, at the time, Plexus filled the gap. Plexus was exactly what we needed because it evolved with the requirements of Maven, and I think that Plexus served us well for the past few years but it&#8217;s time to let go. I never felt compelled to switch until <a href="http://code.google.com/p/google-guice/wiki/Guice20">Guice 2.0</a>.   Guice has the capabilities and adaptability we require in Maven.</p>

<p>For all new development, we&#8217;ve decided to focus on <a href="http://code.google.com/p/google-guice/">Guice</a> and build a compatibility layer for existing components. In this post, I&#8217;m going to discuss the various factors that went into the decision to move to Guice. All of Sonatype&#8217;s product are currently developed using Guice and the Guice/Plexus integration libraries that Stuart will describe in the articles that will follow over the next few weeks, and future work on Maven 3 will be based on Guice.<span id="more-3970"></span></p>

<h3>Why Guice?</h3>

<p>We ultimately went with Guice because it provided a system that could be configured and customized at runtime. It was very close to the model that Plexus was using, and we felt that it would be easy for us to build a compatibility layer between the two. The primary motiviation in this decision was our ability to write that compatibility layer atop whatever framework we selected that would allow for backward-compatibility. You see, it isn&#8217;t good enough in a community this large to just move to a new framework and expect everyone to just scramble to rewrite Maven plugins. We had to find a way to support existing plugins, and existing extensions. We had to find a way to work with all of the existing code that was coded to Plexus and adapt that to a new engine.</p>

<p>Guice is highly adaptable. With Guice we don&#8217;t need to configure all of our components ahead of time, we can instantiate them as needed and modify the &#8220;context&#8221; with a Guice/Plexus integration layer which Stuart will describe in the following articles. The answer to &#8220;why Guice?&#8221; is explained in the code that was required to write this compatibility layer. The only way we found to make this work was by using Guice.     Other reasons included <a href="http://java.dzone.com/news/dependency-injection-and-type-">type safety</a>, <a href="http://code.google.com/p/garbagecollected/wiki/SpringAndGuiceErrors">easy-to-read error messages</a>, and <a href="http://code.google.com/p/peaberry/">OSGi support using peaberry</a>.    All of our development uses the <a href="http://code.google.com/p/atinject/">JSR330 standard @Inject anotations</a>.   We&#8217;re using JSR330 instead of Guice-specific annotations to make sure that our work is more standard and portable going forward.</p>

<h3>Focusing the Community</h3>

<p>Aside from the technical reasons to move to Guice, there are reasons that involve the community. If our audacious goal is to provide world-class build and development infrastructure support, we need to remove unnecessary distractions from our environment. We just were not focused on Plexus, and issues would come up in Plexus that needed to be supported which distracted from the core effort. We&#8217;re not just <em>using</em> Guice. Because we are starting to rely on it, we appreciate the need to work closely with a project like Guice and contribute back to that community.  Stuart is a committer, and we wanted to collaborate with others and use a framework used widely by others.</p>

<p>Maven&#8217;s goal was never to create a dependency injection framework, it was always focused on builds and the infrastructure that supports development. Not long ago, we were contemplating what it would take to improve Plexus, we looked at the effort required to document and support Plexus going forward, and it just didn&#8217;t make any sense for us to continue to apply precious time and effort to a problem that had already been solved by several others. It makes sense to focus the community, and moving to Guice will allow us to devote more of our own resources to supporting the central projects and products.</p>

<h3>Making it Easier to Extend</h3>

<p>When your project or production uses a standard tool, you increase the audience that can customize it. If the goal of Maven is to create a solid foundation of infrastructure for others to build upon, it only makes sense to adopt something more standard. Maven and products like Nexus should be judged by the number and variety of plugins that have been developed for them, and this is something that attract most new users to Maven (the abundance and variety of Maven plugins). Anything we can do to make it easier to extend these systems is the right thing to do for the &#8220;ecosystem&#8221; I described last week.</p>

<p>If you wanted to write a plugin for the initial version of Nexus two years ago, you would have had to know a lot about Plexus. There was nothing particularly wrong with Plexus, it had a well-defined interface and it served its purpose, but there wasn&#8217;t very much documentation, and requiring some knowledge of Plexus for plugin developers was reducing the size of potential developers. In the past year, we&#8217;ve made a course correction, and you can write a Nexus plugin without having to learn any dependency injection framework. What has made this transition possible is the flexibility of Guice.</p>

<h3>Summary</h3>

<p>Stuart&#8217;s going to dive into the technical details in the next five parts of this series. If you are a developer interested in the implementation of Plexus and Guice, you&#8217;ll find these posts to be a good starting point for learning about we&#8217;ve implemented this compatibility layer.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
