<?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; Maven</title>
	<atom:link href="http://www.sonatype.com/people/category/maven/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.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>Wed, 23 May 2012 14:24:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>What do cartoons have to do with build systems?</title>
		<link>http://www.sonatype.com/people/2012/02/what-do-cartoons-have-to-do-with-build-systems/</link>
		<comments>http://www.sonatype.com/people/2012/02/what-do-cartoons-have-to-do-with-build-systems/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 14:00:38 +0000</pubDate>
		<dc:creator>Tim O'Brien</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[build]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=9972</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2012/02/what-do-cartoons-have-to-do-with-build-systems/' addthis:title='What do cartoons have to do with build systems? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>You know who this guy is? Probably not, he&#8217;s Rube Goldberg. I&#8217;m surprised by how few engineers know his work. Rube Goldberg was a cartoonist who lived from 1883-1970, he&#8217;s famous for drawing cartoons of ridiculous and inconceivably complex machines. His work was important during a time in which the world was becoming increasingly mechanized [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2012/02/what-do-cartoons-have-to-do-with-build-systems/' addthis:title='What do cartoons have to do with build systems? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p><img src="http://www.sonatype.com/people/wp-content/uploads/2012/02/Rube_Goldberg_1928.png" alt="" title="Rube_Goldberg_1928" width="173" height="300" class="alignright size-full wp-image-9979" style="margin:5px;" /></p>

<p>You know who this guy is?  Probably not, he&#8217;s <a href="http://www.rubegoldberg.com/?page=home">Rube Goldberg</a>.</p>

<p>I&#8217;m surprised by how few engineers know his work.   <a href="http://www.rubegoldberg.com/?page=bio">Rube Goldberg was a cartoonist</a> who lived from 1883-1970, he&#8217;s famous for drawing cartoons of ridiculous and inconceivably complex machines.    His work was important during a time in which the world was becoming increasingly mechanized and automated providing a sort of cultural &#8220;steam vent&#8221; &#8211; a way for people to poke fun at machines and industry.  I&#8217;d embed his work here, but none of it is public domain, so <a href="http://www.rubegoldberg.com/?page=home">see for yourself</a> or <a href="https://www.google.com/search?q=Rube+Goldberg&#038;hl=en&#038;prmd=imvnso&#038;tbm=isch&#038;tbo=u&#038;source=univ&#038;sa=X&#038;ei=g3hBT6H1BsmCgAfo3pSzBg&#038;ved=0CGoQsAQ&#038;biw=1397&#038;bih=1058">search Google Images</a>.   (Be warned, you can spend hours looking at these cartoons.) </p>

<p>I learned about Rube Goldberg from an Engineering professor who, at the time, said, &#8220;Rube Goldberg is the most important thing you&#8217;ll learn over the next four years&#8221;.   Back then, we all thought he was joking, but it turns out that he wasn&#8217;t.  In fact, I wish more people, especially &#8220;build engineers&#8221; had some exposure to these cartoons.  If they had, they&#8217;d take a step back and realize that there has to be a better way.</p>

<p><span id="more-9972"></span></p>

<h2>&#8220;accomplishing by complex means what seemingly could be done simply&#8221;</h2>

<p>The title of this section is the Webster&#8217;s New Dictionary&#8217;s <a href="http://www.merriam-webster.com/dictionary/rube%20goldberg">definition of &#8220;Rube Goldberg&#8221;</a>.  Does this describe your internal software distribution process?  I fear it might. I&#8217;ve seen some builds and deployment procedures that convince me that people are actively trying to create new Rube Goldberg machines with SCM tools and build scripts.  Almost every month I see some new variation of what I eventually characterize as a &#8220;Crazy Rube Goldberg&#8221; approach to releasing software.  Systems that barely work, and that no one dares to change for fear of breaking some crazy contraption.</p>

<p>Goldberg&#8217;s cartoons and the build&#8217;s inspired by them share common characteristics.    The complexity of his cartoons are almost always defined by the complex ways in which some object is transported from one &#8220;stage&#8221; of the cartoon to the next and the comic &#8220;indirection&#8221; involved in every process.</p>

<p>A cartoon example, a man slips and falls, stepping on a switch which then activates a mechanical hand that throws a bag of sand on to a scale which then triggers a mechanism to fire an arrow at a balloon.   A build example, Jeff runs a build on his laptop because that&#8217;s the only place release builds work properly, he then checks the WAR into Subversion and then sends a series of emails to several other people.  A deployment engineer then takes the output of Jeff&#8217;s build and runs it through a custom, somewhat confusing Perl script to customize a series of configuration variables.</p>

<h2>Common Characteristics</h2>

<p>The common characteristics between Rube Goldberg cartoons and Rube Goldberg builds are:</p>

<ul>
   <li>
     <p><b>Unnecessary Indirection</b></p>
     <ul>
        <li><b>Cartoon:</b> Instead of just creating a machine to pop a balloon, a cartoon creates a contrived process that involves unnecessary (and often impractical) indirection involving pulleys.  Goldberg&#8217;s cartons often find inventive ways to convert potential energy to kinetic energy in some fantastic way you wouldn&#8217;t have thought of.</li>
        <li><b>Awful Build:</b> Instead of using a technology to keep track of binary artifacts, a Rube Goldberg build overloads SCM or (worse) email to send multimegabyte binaries around.  Instead of using a technology with built in support for automatic email notification, your build relies on some ad-hoc system of people remember to send just the right individuals a set of process-related emails.</li>
      </ul>
    </li>   
    <li>
      <p><b>Reliance on the Unlikely</b></p>
      <ul>
        <li><b>Cartoon:</b> A bag of sand thrown across a room lands exactly on a bulls eye of a target triggering yet another unlikely series of events, continue, repeat&#8230;</li>
        <li><b>Awful Build:</b> A complex build that takes more than an hour to complete has a random dependency on a web service that provides an series of configuration variables used to configure a binary for production.   If the web service happens to be unavailable, or if it returns invalid results, the entire build process must be started from scratch.</li>
      </ul>
    </li>
    <li>
      <p><b>Reliance on Animals (or Humans)</b></p>
      <ul>
        <li><b>Cartoon:</b> One of the comic elements almost always present in a Goldberg cartoon is the presence of an animal of some sort.  A bird who, when hit with an arrow squawks loud enough to scare a dog into running and subsequently lifting a weight via a pulley system.</li>
        <li><b>Awful Build:</b> Awful build systems frequently require direct human intervention to the point where the build doesn&#8217;t work unless the same individual is always &#8220;strapped&#8221; into the build in just the right way.   &#8220;After that compilation step completes, Jack usually logs in and modifies the build number before he runs the deployment script&#8221;.</li>
      </ul>
   </li>
   <li>
     <p><b>Comedy</b></p>
     <ul>
        <li><b>Cartoons:</b> Rube Goldberg&#8217;s cartoons are comedic because they involve the impractical or the impossible.   Readers find them amusing because they are plausible, yet inadvisable ways to implement a process.
        <li><b>Rube Goldberg-style builds</b> are comedic because they involve the impractical or the impossible.  Developers find them amusing because they are plausible, yet inadvisable ways to implement  a process.</li>
      </ul>
    </li>
 </ul>

<p></tr><br />
</table></p>

<h2>Build/Deploy systems are Comedy?</h2>

<p>If they work, they can be.    It&#8217;s quite common for the build/deploy lifecycle at a corporation to involve a series of steps that no one fully comprehends.   Maybe there&#8217;s a crazy 4000 line Ant script or maybe there&#8217;s a multi-headed Hydra of bash magic that happens to produce a working system.   In the last few months I&#8217;ve talked to people with build systems that work, but no one on staff understands how.  When you ask about these release procedures people often chuckle a bit &#8211; &#8220;Oh, right, our release process&#8230;. well let&#8217;s say it&#8217;s a little confusing&#8230;&#8221;. </p>

<p>&#8220;Why does the build do it like this?&#8221; is often met by, &#8220;I don&#8217;t know, but I&#8217;m too scared to change this thing right now, the contractor left us with this and it works&#8230; for now.&#8221;   In other words, many of these builds involve a series of unknown pulleys and unexpected indirections that resemble a cartoon.</p>

<p>In the next part of this series, we&#8217;re going to talk about how Nexus can be used to untangle a build into something more reasonable.   Something that doesn&#8217;t involve pulleys, magic, and a series of unlikely events.</p>

<p style="font-size: 85%;"><b>Note:</b> Rube Goldberg doesn&#8217;t do it for you?  Then just watch the <a href="http://www.youtube.com/watch?v=qybUFnY7Y8w">OK Go video &#8220;This Too Shall Pass&#8221;</a> to get a modern idea of what I&#8217;m talking about.   If you haven&#8217;t seen that, you should.   In fact, if you haven&#8217;t seen this video yet, stop reading our boring Nexus blog and take a break, it&#8217;s worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2012/02/what-do-cartoons-have-to-do-with-build-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Simple Reminder for Maven/Gradle/Ivy Users: Proxy Central</title>
		<link>http://www.sonatype.com/people/2012/01/a-simple-reminder-for-mavengradleivy-users-proxy-central/</link>
		<comments>http://www.sonatype.com/people/2012/01/a-simple-reminder-for-mavengradleivy-users-proxy-central/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 14:59:30 +0000</pubDate>
		<dc:creator>Tim O'Brien</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[central]]></category>
		<category><![CDATA[Nexus]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=9878</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2012/01/a-simple-reminder-for-mavengradleivy-users-proxy-central/' addthis:title='A Simple Reminder for Maven/Gradle/Ivy Users: Proxy Central '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Over the course of the past few years, I’ve interacted with hundreds of people when talking about build tools and repository management.   It continues to surprise me how many people don’t realize where these artifacts come from.   When you run a build and these JARs just show up alongside all of their dependencies, [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2012/01/a-simple-reminder-for-mavengradleivy-users-proxy-central/' addthis:title='A Simple Reminder for Maven/Gradle/Ivy Users: Proxy Central '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Over the course of the past few years, I’ve interacted with hundreds of people when talking about build tools and repository management.   It continues to surprise me how many people don’t realize where these artifacts come from.   When you run a build and these JARs just show up alongside all of their dependencies, it’s like magic to most people.     If you know how it works, it’s very obvious to you that running a repository manager is the right thing to do.  This post is a reminder to everyone using build tools that rely on Central: take time to proxy Central with a repository manager.</p>

<h2>“Wait, that’s how Central works?”</h2>

<p>There’s something so automatic about dependency management in Maven that it often takes people a few months to understand exactly where those JAR files are coming from.
In an 8 hour Maven class, I get to dependencies in the third hour, and after describing Central, what it is was like before Central, how metadata is stored in a repository alongside binaries, transitive dependencies, etc&#8230;. it all falls into place, and people realize that this simple thing they’ve grown accustomed to is only easy because of a ten year effort to refine the model, the creation of a support structure for source forges at places like Oracle and Google, and a constant investment in infrastructure.</p>

<p><center>
<iframe width="640" height="360" src="http://www.youtube.com/embed/4ixkpScdpRw?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe>
</center></p>

<p>On the one hand, it’s a great success that Central is, for the most part, an invisible utility that supports developers.  On the other hand, it’s the kind of thing that people can start to take for granted very easily.</p>

<p>For example, a few months ago I spoke to someone who worked in an environment disconnected from the internet for security reasons.   This individual was talking about how limiting it was to have to download JARs from open source projects manually and assemble them in a project.   His words were: “It’s like programming Java in 2001 again.”</p>

<h2>How can you help?</h2>

<p>Imagine millions of developer spread all over the world: different time zones, different applications, but they all hit the same service: Central.    Some regions have more developers than others so we certainly see peaks in usage throughout the day, but in general, Central’s serving thousands of files throughout the world at any given time during the day.</p>

<p>Maybe someone just installed Maven for the first time, or maybe they blew away a local repository, with numbers like these we see a world that has a constant appetite for artifacts.   It isn’t a problem for Central, and I’m not writing this because Central is falling down on the job. Central can handle it, but it certainly isn’t the most efficient way to support millions developers.  It isn’t a good use of network bandwidth, and it isn’t a good use of energy to constantly cart around the same static JARs over and over and over again when the solution is so easy.</p>

<p>If everyone who used a build tool that interacted with Central adopted a repository manager such as Nexus we’d have a faster, more responsive system.   Central’s maintainers would be focused less on addressing the occasional runaway build and could spend more time and resource on increasing availability and functionality of this essential service.</p>

<h2>Broken Builds</h2>

<p>The other factor playing into this is that Maven builds only download releases once.   It isn’t like these build tools are repeatedly returning to Central to download release artifacts over and over again.</p>

<p>Well&#8230; actually&#8230; that isn’t true, we’ve seen some installations of Hudson configured to delete a local repository before every build placing a high load on Central.   Imagine a build that downloads 50 MB of dependencies running once every 5 minutes.  That’s one build consuming ~14 GB a day never mind the time wasted downloading static artifacts.
While these broken builds are the exception, they do still show up from time to time.  Central can handle the load, but imagine 1000 of these broken builds running continuously and you can see the challenge.</p>

<h2>A Simple Reminder: Please Proxy Central</h2>

<p>We’re constantly watching the performance of the system and making sure it stays up and running for an entire world of developers.  If you use a build tool that hits Central whether it is Buildr or Maven or Gradle or Ivy, you can help us by running a Nexus instance.</p>

<p>Even if all of your builds work perfect, running a local Nexus instance helps preserve Central as a public, free resource and it will lead to faster, more responsive builds.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2012/01/a-simple-reminder-for-mavengradleivy-users-proxy-central/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The best Maven how-tos from the Sonatype blog</title>
		<link>http://www.sonatype.com/people/2011/07/the-best-maven-how-tos-from-the-sonatype-blog/</link>
		<comments>http://www.sonatype.com/people/2011/07/the-best-maven-how-tos-from-the-sonatype-blog/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 13:00:00 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Maven best practices]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=8461</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/07/the-best-maven-how-tos-from-the-sonatype-blog/' addthis:title='The best Maven how-tos from the Sonatype blog '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Sonatype is going through the archives and digging up articles that we think would be useful to developers using our tools. If you use Maven, keep reading the post below from Sonatype Vice President of Engineering Brian Fox on Maven best practices and how-tos. We have a handful of Maven best practice and how-tos documented [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/07/the-best-maven-how-tos-from-the-sonatype-blog/' addthis:title='The best Maven how-tos from the Sonatype blog '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p><em>Sonatype is going through the archives and digging up articles that we think would be useful to developers using our tools. If you use Maven, keep reading the post below from Sonatype Vice President of Engineering Brian Fox on Maven best practices and how-tos.</em></p>

<hr />

<p>We have a handful of Maven best practice and how-tos documented in  the blogs. Over time they get buried by newer posts, but the content is  still just as relevant. Learn more about Maven by checking out the following blogs:
<img title="More..." src="http://www.sonatype.com/people/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>

<p><a href="http://www.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea/">(1) Why Putting Repositories in your pom is a bad idea</a></p>

<p>How to properly manage repository definitions and why you shouldn&#8217;t declare them in your poms.</p>

<p><a href="http://www.sonatype.com/people/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/">(2) Best Practices for Releasing with 3rd Party Snapshot Dependencies</a></p>

<p>How to most effectively create your own internal release of a snapshot dependency.</p>

<p><a href="http://www.sonatype.com/people/2009/01/maven-continuous-integration-best-practices/">(3) Maven Continuous Integration Best Practices</a></p>

<p>Multiple techniques for running Maven builds from a CI system.</p>

<p><span id="more-8461"></span></p>

<p><a href="http://www.sonatype.com/people/2008/05/maven-code-how-to-detect-if-you-have-a-snapshot-version/">(4) How to Detect if you have a Snapshot Version</a></p>

<p>See the code that Maven uses to detect a snapshot  version. This is helpful if you have non-standard release versions to  make sure they won&#8217;t be detected by Maven as a snapshot.</p>

<p><a href="http://www.sonatype.com/people/2008/05/optimal-maven-plugin-configuration/">(5) Optimal Maven Plugin Configuration</a></p>

<p>Tips on how to configure plugins in a way that  makes it easier to understand what is happening in your pom.</p>

<p><a href="http://www.sonatype.com/people/2008/05/adding-additional-source-folders-to-your-maven-build/">(6) Adding additional source folders to your Maven build</a></p>

<p>How to use the <em>buildhelper</em> plugin to add additional  source folders to your build. This is common if you have tools that  generate sources that don&#8217;t have a Maven plugin to add the source folder  automatically.</p>

<p><a href="http://www.sonatype.com/people/2008/05/misused-maven-terms-defined/">(7) Misused Maven Terms Defined</a></p>

<p>Find out about several terms that are often misquoted. This post also specifically discusses classifiers and attached artifacts.</p>

<p><a href="http://www.sonatype.com/people/2008/04/how-to-override-a-plugins-dependency-in-maven/">(8) How to override a plugin&#8217;s dependency</a></p>

<p>How to override a plugin dependency in your own  pom&#8230;for example if you want to use a newer version of a tool wrapped  by a plugin (pmd, checkstyle, cobertura are common examples)</p>

<p><a href="http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/">(9) How to share resources across projects</a></p>

<p>How to share resources in a repeatable way  without using relative paths in your poms. It also shows a technique for  sharing <em>checkstyle</em> and pmd configurations across all your modules.</p>

<p><a href="http://www.sonatype.com/people/2008/04/maven-209-released/">(10) How Plugin versions are determined</a></p>

<p>Learn about how Maven determines which version of a plugin to use, and why  you should use <em>PluginManagement</em> to control the versions yourself.</p>

<p><a href="http://www.sonatype.com/people/2009/04/how-to-convert-from-ant-to-maven-in-5-minutes/">(11) How to convert from Ant to Maven in 5 minutes</a></p>

<p>Okay so it might take longer than 5 minutes to convert from Ant to Maven, but this post will show you that it is possible to work the migration in parallel so that most of  your team sees the conversion happen very quickly when the time is  right.</p>

<p><a href="http://www.sonatype.com/people/2009/08/how-to-make-an-executable-jar-in-maven/">(12) How to make an executable JAR</a></p>

<p>Step-by-step instructions on how to make a standalone JAR (i.e. one with no dependencies) executable.</p>

<p>&nbsp;</p>

<p><strong>Note: If you have suggestions for further topics, please leave a comment with your ideas.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/07/the-best-maven-how-tos-from-the-sonatype-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video: Multi-master configuration for Nexus</title>
		<link>http://www.sonatype.com/people/2011/07/video-multi-master-configuration-for-nexus/</link>
		<comments>http://www.sonatype.com/people/2011/07/video-multi-master-configuration-for-nexus/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 13:00:09 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[GetSatisfaction.com]]></category>
		<category><![CDATA[Nexus OSS]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=8416</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/07/video-multi-master-configuration-for-nexus/' addthis:title='Video: Multi-master configuration for Nexus '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Some questions about syncing Maven repositories between two sites were recently asked on GetSatisfaction.com. &#8220;We will be moving data centers and want to setup another Maven2 repo that is managed with Nexus OSS. We want both repositories to be online and read\writeable until we migrate all our environments to the new site. I have a [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/07/video-multi-master-configuration-for-nexus/' addthis:title='Video: Multi-master configuration for Nexus '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Some questions about syncing Maven repositories between two sites were recently asked on <a href="http://getsatisfaction.com/sonatype/topics/options_for_syncing_maven2_repo_between_two_sites" target="_blank">GetSatisfaction.com</a>.</p>

<blockquote><em>&#8220;We will be moving data centers and want to setup another Maven2 repo  that is managed with Nexus OSS. We want both repositories to be online  and read\writeable until we migrate all our environments to the new  site. I have a few questions:</em>
<ol>
    <li><em>What is the best method for copying the repo to the new location?</em></li>
    <li><em>What is the best method for keeping the two repos in sync? We want to minimize network bandwidth usage.&#8221;</em></li>
</ol>
</blockquote>

<p><strong>The video below answers these questions, and offers multiple solutions:</strong></p>

<p><object width="600" height="371"><param name="movie" value="http://www.youtube.com/v/T0buDLODq0g?version=3&amp;hl=en_US&amp;rel=0" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="600" height="371" src="http://www.youtube.com/v/T0buDLODq0g?version=3&amp;hl=en_US&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/07/video-multi-master-configuration-for-nexus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Last Chance to Enroll: MVN-101 Training in Europe</title>
		<link>http://www.sonatype.com/people/2011/05/last-chance-to-register-mvn-101-training-in-europe/</link>
		<comments>http://www.sonatype.com/people/2011/05/last-chance-to-register-mvn-101-training-in-europe/#comments</comments>
		<pubDate>Thu, 26 May 2011 15:48:38 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Maven Mechanics]]></category>
		<category><![CDATA[Maven training]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=8151</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/05/last-chance-to-register-mvn-101-training-in-europe/' addthis:title='Last Chance to Enroll: MVN-101 Training in Europe '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>We are offering one last virtual Maven Mechanics (MVN-101) training course for European business hours in June. This will be our last virtual class in CEST for the summer. Be sure to enroll today! Course details: Course: Maven Mechanics (MVN-101) Date: Tuesday June 14, 2011 Time: 9:00AM – 4:00PM CEST (UTC/GMT + 0200) *European Hours [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/05/last-chance-to-register-mvn-101-training-in-europe/' addthis:title='Last Chance to Enroll: MVN-101 Training in Europe '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><h4>We  are offering one last virtual Maven Mechanics (MVN-101) training course  for European business hours in June. This will be our last virtual  class in CEST for the summer. Be sure to enroll today!</h4>

<h5>Course details:</h5>

<ul>
    <li>Course: Maven Mechanics (MVN-101)</li>
    <li>Date: Tuesday June 14, 2011</li>
    <li>Time: 9:00AM – 4:00PM CEST (UTC/GMT + 0200) *European Hours</li>
    <li>Enrollment Fee: $595 USD (~425 EUR)</li>
</ul>

<p><a href="http://www.sonatype.com/stshop/add/517/1" target="_blank"><strong><span style="font-size: medium">ENROLL TODAY!</span></strong></a></p>

<p>Maven Mechanics (MVN-101) is the ideal course for programmers who  work with Apache Maven  projects and need to understand how to work with an existing Maven  build. If your team is just delving into Maven and Nexus, this class is  the  easiest way to make sure that everyone starts from the same foundation.  This class is also appropriate for the existing Maven user who is  interested in developing a greater understanding of the Maven  fundamentals. <strong><a href="http://sonatype.com/Services/Training/MVN-101-Maven-Mechanics" target="_blank"><span style="text-decoration: underline">Learn more here.</span></a> </strong></p>

<p>You  will leave this Maven tutorial equipped with a full understanding of  the Maven Project Object Model (POM) and a firm grasp of the underlying  fundamentals of this development kit including:</p>

<ul>
    <li>The Maven lifecycle</li>
    <li>Maven plugins and goals</li>
    <li>Multi-module Maven projects</li>
    <li>The contents of the Project Object Model (POM)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/05/last-chance-to-register-mvn-101-training-in-europe/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Maven 3: The Future of Enterprise Java Build Infrastructure</title>
		<link>http://www.sonatype.com/people/2011/05/maven-3-the-future-of-enterprise-java-build-infrastructure/</link>
		<comments>http://www.sonatype.com/people/2011/05/maven-3-the-future-of-enterprise-java-build-infrastructure/#comments</comments>
		<pubDate>Thu, 05 May 2011 14:00:00 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[EclipseCon 2011]]></category>
		<category><![CDATA[Maven 3]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=7758</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/05/maven-3-the-future-of-enterprise-java-build-infrastructure/' addthis:title='Maven 3: The Future of Enterprise Java Build Infrastructure '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>The Maven 3: The Future of Enterprise Java Build Infrastructure presentation is now available for viewing. This presentation was given at EclipseCon 2011 by Sonatype founder Jason van Zyl. More on this presentation: Maven 3 is the best version of Maven yet. Maven 3 is faster, has been optimized for IDE use, and is fully [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/05/maven-3-the-future-of-enterprise-java-build-infrastructure/' addthis:title='Maven 3: The Future of Enterprise Java Build Infrastructure '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p><!--dzoneZ=none-->The <strong>Maven 3: The Future of Enterprise Java Build Infrastructure</strong> presentation is now available for viewing. This presentation was given at EclipseCon 2011 by Sonatype founder Jason van Zyl.</p>

<p><strong>More on this presentation:</strong></p>

<p>Maven 3 is the best version of Maven yet. Maven 3 is faster, has been  optimized for IDE use, and is fully backward compatible with Maven 2.  One of the big focuses of Maven 3 is to provide a more reliable, more  stable and better performing build tool. Faster Maven builds lead to  higher developer productivity in your organization.</p>

<p><strong>Watch the video below:</strong></p>

<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/I4zSHgQ0fOE?fs=1&amp;hl=en_US&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="500" height="405" src="http://www.youtube.com/v/I4zSHgQ0fOE?fs=1&amp;hl=en_US&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/05/maven-3-the-future-of-enterprise-java-build-infrastructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hudson Pro: Where’s the Maven job type?</title>
		<link>http://www.sonatype.com/people/2011/05/hudson-pro-where%e2%80%99s-the-maven-job-type/</link>
		<comments>http://www.sonatype.com/people/2011/05/hudson-pro-where%e2%80%99s-the-maven-job-type/#comments</comments>
		<pubDate>Tue, 03 May 2011 13:00:46 +0000</pubDate>
		<dc:creator>Tim O'Brien</dc:creator>
				<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Hudson Professional]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=8041</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/05/hudson-pro-where%e2%80%99s-the-maven-job-type/' addthis:title='Hudson Pro: Where’s the Maven job type? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>One important difference between Hudson Open Source and Hudson Professional is how they support Maven 3. Sonatype has developed state-of-the-art support for Maven 3 focusing on creating seamless integration between the internals of Hudson CI and Maven.   Year of work on Maven 3 internals to support more efficient embedding along with our multi-year investment in [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/05/hudson-pro-where%e2%80%99s-the-maven-job-type/' addthis:title='Hudson Pro: Where’s the Maven job type? '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>One important difference between Hudson Open Source and Hudson Professional is how they support Maven 3.</p>

<p>Sonatype has developed state-of-the-art  support for Maven 3 focusing on creating seamless integration between  the internals of Hudson CI and Maven.   Year of work on Maven 3  internals to support more efficient embedding along with our multi-year  investment in bringing both JSR-330 support and GWT UI integration to  Hudson CI  has produced a CI system that support Maven 3 like no other  on the market.</p>

<p>If  you’ve used Hudson and Maven together in the past, you might be  familiar with the Maven 2 project type that provides users with the  ability to define a Maven build that is aware of a project’s POM. While we understood the motivation for a Maven-specific project type,  we took our Maven support in an entirely difference direction. We  created a Maven build that can be used a part of a larger freestyle  build, and the reason we did this was to get away for the idea that a  Maven build can only include one step, one call to a series of goals.</p>

<p>Sonatype found this to be more of a limitation than an advantage.</p>

<p><span id="more-8041"></span></p>

<p><strong>Supporting Real-world Maven Builds</strong></p>

<p>Why?   Consider an enterprise build &#8211; one that needs to prepare and perform a  release.  In the scenario it is essential that the build process  contain two separate calls to release:prepare and release:perform. It  also might be essential to call out to supporting scripts or other parts  of the build that might fall outside of the scope of the Maven build. In a complex build environment, Maven is often not the only build tool  involved in a process. Instead of binding our users to a single  Maven-specific project type, we implemented Maven support as a builder  to make sure that Hudson Professional users had as much flexibility as  they needed to create quality enterprise builds.</p>

<p><strong>Creating a New Maven 3 Job</strong>
If  you are new to Hudson Professional and you are wondering how to create a  new Maven 3 build, you should follow these simple steps:</p>

<ol>
<li>Create a New Job</li>
<li>Select “Build a free-style Software Project”</li>
<li>Add a Build Step and select “Invoke” Maven.</li>
</ol>

<p><strong>Creating a New Maven 3 Project from a Git Repository</strong></p>

<p>The following video demonstrates the process for creating a new Maven 3 project from a Git repository:</p>

<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="371" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Mh7ft61Wg9w?fs=1&amp;hl=en_US&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="600" height="371" src="http://www.youtube.com/v/Mh7ft61Wg9w?fs=1&amp;hl=en_US&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>

<p><strong>Creating a New Maven 3 Project from a Subversion Repository</strong></p>

<p>The following video demonstrates the process for creating a new Maven 3 project from a Subversion repository:</p>

<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="371" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/1-tgRMm_Qo0?fs=1&amp;hl=en_US&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="600" height="371" src="http://www.youtube.com/v/1-tgRMm_Qo0?fs=1&amp;hl=en_US&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/05/hudson-pro-where%e2%80%99s-the-maven-job-type/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sonatype Maven Training class available during European business hours</title>
		<link>http://www.sonatype.com/people/2011/04/maven-training-available-during-european-business-hours/</link>
		<comments>http://www.sonatype.com/people/2011/04/maven-training-available-during-european-business-hours/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 12:00:43 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Maven training]]></category>
		<category><![CDATA[MVN-101]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=8010</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/04/maven-training-available-during-european-business-hours/' addthis:title='Sonatype Maven Training class available during European business hours '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>UPDATE :: Enrollment for this class is now closed Due to popular request, Sonatype has decided to offer a MVN-101 training course in May during European business hours. The training course will be led by Anders Hammar of Devoteam Sweden, a certified Sonatype Training Partner. Course details: MVN-101 Tuesday May 10, 2011 European Hours 9:00 [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/04/maven-training-available-during-european-business-hours/' addthis:title='Sonatype Maven Training class available during European business hours '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><!--dzoneZ=none-->

<h4>UPDATE :: Enrollment for this class is now closed
</h4>

<p>Due to popular request, Sonatype has decided to offer a MVN-101 training course in May during European business hours. The training course will be led by Anders Hammar of Devoteam Sweden, a certified Sonatype Training Partner.</p>

<p><strong>Course details:</strong></p>

<ul>
    <li>MVN-101</li>
    <li>Tuesday May 10, 2011</li>
    <li>European Hours 9:00 am &#8211; 4:00 pm CEST (GMT + 02:00)</li>
    <li><strong><a href="http://store.sonatype.com/training/maven-mechanics">ENROLL TODAY!</a></strong></li>
</ul>

<p>Maven Mechanics MVN-101 is the premier Java developer training course. It comprehensively covers Maven installation and configuration, explains the motivation behind Maven and gives an overview of related development tools. You will leave this Maven tutorial equipped with a full understanding of the Maven Project Object Model (POM) and a firm grasp of the underlying fundamentals of this development kit including:</p>

<ul>
    <li>The Maven lifecycle</li>
    <li>Maven plugins and goals</li>
    <li>Multi-module Maven projects</li>
    <li>The contents of the Project Object Model (POM)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/04/maven-training-available-during-european-business-hours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn Maven best practices this April</title>
		<link>http://www.sonatype.com/people/2011/04/learn-maven-best-practices-this-april/</link>
		<comments>http://www.sonatype.com/people/2011/04/learn-maven-best-practices-this-april/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 14:00:00 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Maven training]]></category>
		<category><![CDATA[MVN 201]]></category>
		<category><![CDATA[MVN-101]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=7735</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/04/learn-maven-best-practices-this-april/' addthis:title='Learn Maven best practices this April '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Two new virtual training dates have been added to the Sonatype schedule. Learn Maven best-practices from experts in the Maven community. With Sonatype training courses core Maven contributors carefully design our curriculum to cover topics from Maven basics to advanced development infrastructure design. Registration is now closed for our April classes. Be sure to check [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/04/learn-maven-best-practices-this-april/' addthis:title='Learn Maven best practices this April '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p><!--dzoneZ=none-->Two new virtual training dates have been added to the Sonatype schedule. Learn Maven best-practices from experts in the Maven community. With <a href="http://www.sonatype.com/training.html" target="_blank">Sonatype training courses </a>core Maven contributors carefully design our  curriculum to cover topics from Maven basics to advanced development  infrastructure design.</p>

<h4>Registration is now closed for our April classes. Be sure to check out our <a href="http://www.sonatype.com/training.html" target="_blank">May offering</a>!</h4>

<p><strong>MVN-101: Maven Mechanics</strong></p>

<ul>
    <li>April 12, 2011</li>
    <li>11am &#8211; 6pm EDT</li>
    <li><a href="http://store.sonatype.com/training/maven-mechanics" target="_blank">Enroll in MVN-101</a></li>
</ul>

<p><strong>MVN-201: Development Infrastructure Design</strong></p>

<ul>
    <li>April 13, 2011</li>
    <li>11am &#8211; 7pm EDT</li>
    <li><a href="http://store.sonatype.com/training/mvn-201-development-infrastructure-design" target="_blank">Enroll in MVN-201</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/04/learn-maven-best-practices-this-april/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top Ten Reasons to Move to Maven 3</title>
		<link>http://www.sonatype.com/people/2011/02/top-ten-reasons-to-move-to-maven-3/</link>
		<comments>http://www.sonatype.com/people/2011/02/top-ten-reasons-to-move-to-maven-3/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 11:22:56 +0000</pubDate>
		<dc:creator>Anders Hammar</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=7534</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/02/top-ten-reasons-to-move-to-maven-3/' addthis:title='Top Ten Reasons to Move to Maven 3 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>I recently helped Dennis Lundberg prepare a talk for Jfokus on the top reasons why you should switch to Maven 3. When I work with customers setting up, or improving, their Maven-based development infrastructure I always recommend using Maven 3. I thought I&#8217;d share with you the top ten reasons that Dennis highlighted in his [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.sonatype.com/people/2011/02/top-ten-reasons-to-move-to-maven-3/' addthis:title='Top Ten Reasons to Move to Maven 3 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>I recently helped Dennis Lundberg prepare a talk for Jfokus on the top reasons why you should switch to Maven 3. When I work with customers setting up, or improving, their Maven-based development infrastructure I always recommend using Maven 3.  I thought I&#8217;d share with you the top ten reasons that Dennis highlighted in his talk.</p>

<p>In a nutshell, Maven 3 is superior to Maven 2. While there might not be one single killer feature for most users, it&#8217;s more a matter of several bug fixes and improvements that together make it a much better tool. Depending on your use case and your preference, some of these reasons will be more compelling than others.   Here&#8217;s the list.</p>

<h3>#1. Maven 3 is the &#8220;Latest and Greatest&#8221;</h3>

<p>Surely not the wording that you should use when selling this to your manager/boss/product owner/whatever, but when it comes to tools and frameworks many developers like knowing they are using the latest version.  Maven 3.0 is where all the new work is done and where the main focus is.   Maven 3 has a six week release cycle which was inspired by how things work at Eclipse.   This gives you more predictability.   You know that critical and serious bugs will be addressed quickly, and you&#8217;ll only need to wait a few weeks before the next official release is available.</p>

<p><span id="more-7534"></span></p>

<p>On the other, in Maven 2.x, you don&#8217;t know if there will be a timely release.  Bugs are fixed, but there&#8217;s no sustained effort to test and push new Maven 2 releases.  As an example there are <span class="nobr"><a class="external-link" rel="nofollow" href="http://jira.codehaus.org/browse/MNG/fixforversion/15472">12 fixed tickets</a></span> for Maven 2.2.2, of which one has been fixed for more than one year.  Few developers are paying attention to Maven 2, and the focus is on Maven 3.</p>

<h3>#2. Maven 3 Isolates Project Dependencies and Plugin Dependencies</h3>

<p>In Maven 3, project dependencies are retrieved from &#8220;repositories&#8221; and plugin dependencies are retrieved from &#8220;pluginRepositories&#8221;.    Contrast this to Maven 2 where plugin dependencies could be retrieved from any Maven repository.    If you strictly controlled your repositories and locked down your own project&#8217;s dependencies you would often run into problems with plugin dependencies.   With Maven 3, your own projects dependencies are retrieved from the declared &#8220;repositories&#8221; while any plugin&#8217;s dependencies are retrieved from the declared &#8220;pluginRepositories&#8221;.</p>

<p>This might not matter to many of you, but I see a lot of larger corporations running into this issue all the time.   If you want to have strict control of your own dependencies, you can do this with the Procurement features of Nexus Professional.   Procurement is important, but it also requires you to be meticulous about which dependencies you allow from external repositories.   With Maven 2, because plugin dependencies can be mixed up with regular project dependencies this forces you to take on the responsibility of enumerating and allowing all of your plugin&#8217;s dependencies.   In a complex project this mean keeping track of hundred of dependencies which had nothing to do with your own project&#8217;s dependencies.</p>

<p>With Maven 3, having these two repositories truly separated makes it possible to define a procured repository and a more open pluginRepository.</p>

<h3>#3. Maven 3  Supports Extensions for Alternative Repository Layouts</h3>

<p>With Maven 3 it is now possible to create extensions for other types of repositories than the default Maven layout. This gives us new possibilities demonstrated by projects such as <span class="nobr"><a class="external-link" rel="nofollow" href="http://tycho.sonatype.org/">Tycho</a></span>, which allows you to build Eclipse plugins and OSGi bundles with Maven.   If you are developing Eclipse plugins, Maven 3 makes it possible to align your OSGi builds with the rest of your Maven-based builds.</p>

<h3>#4. Maven 3 is Easier to Embed</h3>

<p>One of the main reasons for the major refactoring between Maven 2 and Maven 3, was to allow for Maven to be embedded in other tools. There were some early trials with embedding Maven 2, but it was simply not designed for that and a new architecture was necessary. All of you using m2eclipse are already using Maven 3 and have been doing so for a long time. Switching to Maven 3 for command line executions makes a lot of sense as it aligns the version of Maven in your tools and adds consistency between CLI and your IDE.</p>

<h3>#5. Maven 3 has Improved Artifact/Dependency Resolution</h3>

<p>Thanks to the refactoring of the artifact resolution logic in Maven, the existing deficiencies of artifact resolution in reactor builds with Maven 2.x have been fixed. I&#8217;m sure most of you have run into issues trying to build a multi-module project unless you execute &#8220;mvn install&#8221;. The reason is that the artifacts built by the modules are not resolved from the reactor but have to exist in the local repository. One very typical symptom of this is having to configure the preparationGoals param of maven-release-plugin to &#8220;clean install&#8221; instead of the default &#8220;clean verify&#8221;. Maven 3.0 fixes this and correctly resolves artifacts within the reactor, allowing you to use the default values of the preparationGoals param for example.</p>

<p>More on this topic can be read in Benjamin&#8217;s <span class="nobr"><a class="external-link" rel="nofollow" href="http://www.sonatype.com/people/2010/12/whats-in-maven-3-0-for-users/">What&#8217;s in Maven 3.0 for users?</a></span> blog post.</p>

<h3>#6. Maven 3 has Improved Logging</h3>

<p>For Maven 3.0 the logging output has been improved. It&#8217;s not a major remake, but smaller changes that makes it easier to read and comprehend. The improvements include separating output from every plugin with an empty line, include the version of the plugin being executed, as well as specifying the artifactId of the project being build. The latter makes the logging output for a multi-module build a lot easier to browse. Should your build fail, the error reporting provides you with a link to a wiki page where the error is described in more details including possible causes.</p>

<h3>#7. Maven 3 has More Intelligent Class Loading for Multi-module Builds</h3>

<p>Maven uses several different class paths during the build, including separate classpaths for the plugins.  Again, this might not seem like a big deal unless you&#8217;ve been burned by unanticipated side-effects of what was generally viewed as a bug in Maven 2.  In Maven 2 the first execution of a plugin determined the classpath for all executions of that plugin. This often caused issues when the same plugin was used more than once during a build, and the second invocation required the use of a different classpath.   In Maven 2, if you needed to execute the Antrun plugin twice in a multi-module build with two different classpaths, you were out of luck.   This particular issue was a hassle for the 60 people that voted to fix issue <span class="nobr"><a class="external-link" rel="nofollow" href="http://jira.codehaus.org/browse/MNG-1323">MNG-1323</a></span> in the issue tracker.</p>

<p>In Maven 3.0, this issue has been fixed and every execution gets its own, isolated classpath.</p>

<h3>#8. Maven has Higher Standards for POMs</h3>

<p>Maven 3.0 helps you improve the overall quality of your POM and prevent future problems and errors.  Aside from informing of obvious errors and omissions, Maven 3.0 also helps you adhere to best-practices by being more strict about POM validity. For example, Maven 3.0 will warn you if you haven&#8217;t specified the version of a plugin used (i.e. using latest release) or have duplicated dependencies with the same POM, as it could result in unpredictable future build results.</p>

<p>Maven 3 doesn&#8217;t just have better, more strict POM validation, it will point you in the direction of more concise and complete POM configuration.   With Maven 2, it was up to you to gain knowledge of Maven best practices.   When you start using Maven 3, Maven will start to provide you with some strong hints about what should be happening in your POMs.</p>

<h3>#9. Maven 3 Supports Parallel Builds</h3>

<p>Maven 3 didn&#8217;t have a lot of new features to speak of as much of the improvement was incremental and behind the scenes.  One of the very few new features in Maven 3.0 is experimental support for parallel builds. This support is added to Maven core, but it requires the plugins used during a parallel build to declare themselves thread safe for it to properly work.  If a plugin goal is thread safe (and most of the major goals are by now), this is described on the goal description page of its Maven site.</p>

<p>This feature isn&#8217;t a match for every build.  For example, some types of integration tests might not be suitable for parallel. However, when parallel builds are used, it often results in a much faster build times. Below are two different projects which Dennis did some benchmarking on. The determining factor for performance improvement, aside from the number of CPU cores, was the dependencies between the modules. Project&#8217;s with wide internal dependency trees experience more build time reductions than those that had very deep dependency trees.   The structure of your internal dependencies dictates which builds must be serialized with one another and which builds can be executed in parallel.</p>

<p>More info regarding parallel builds in Maven 3 can be found <span class="nobr"><a class="external-link" rel="nofollow" href="https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3">on this Maven wiki page</a></span>.</p>

<p><strong>&#8220;mvn package&#8221; on Maven SCM trunk (32 modules)</strong></p>

<table class="confluenceTable">
<tbody>
<tr>
<th class="confluenceTh"></th>
<th class="confluenceTh"> Time <br class="atl-forced-newline" /></th>
<th class="confluenceTh"> Memory <br class="atl-forced-newline" /></th>
</tr>
<tr>
<td class="confluenceTd">Maven 3.0.2 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">3:15</td>
<td class="confluenceTd">27/51M</td>
</tr>
<tr>
<td class="confluenceTd">Maven 3.0.2, 4 threads in parallel <br class="atl-forced-newline" /></td>
<td class="confluenceTd">2:26 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">28/62M <br class="atl-forced-newline" /></td>
</tr>
</tbody>
</table>

<p><strong>&#8220;mvn package&#8221; on a corporate project (11 modules)</strong></p>

<table class="confluenceTable">
<tbody>
<tr>
<th class="confluenceTh"></th>
<th class="confluenceTh"> Time <br class="atl-forced-newline" /></th>
<th class="confluenceTh"> Memory <br class="atl-forced-newline" /></th>
</tr>
<tr>
<td class="confluenceTd">Maven 3.0.2 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">0:54</td>
<td class="confluenceTd">15/35M</td>
</tr>
<tr>
<td class="confluenceTd">Maven 3.0.2, 4 threads in parallel <br class="atl-forced-newline" /></td>
<td class="confluenceTd">0:40 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">16/42M <br class="atl-forced-newline" /></td>
</tr>
</tbody>
</table>

<h3>#10. Maven 3 Builds are Faster, Much Faster</h3>

<p>Possibly the one reason all of us could agree on is better performance. Maven 3.0 is both faster and has a lower memory footprint than Maven 2.x. While there might be some rare corner case where this isn&#8217;t true, Maven 3 builds are dramatically faster in almost all cases. How much you gain depends on the structure and content of your project though. For his talk, Dennis had some benchmarks which are shown below. The benchmarks were done on a dual-core CPU and 4GB RAM, running Windows XP with JDK 1.5.</p>

<p><strong>&#8220;mvn package&#8221; on Maven SCM trunk (32 modules)</strong></p>

<table class="confluenceTable">
<tbody>
<tr>
<th class="confluenceTh"></th>
<th class="confluenceTh"> Time <br class="atl-forced-newline" /></th>
<th class="confluenceTh"> Memory <br class="atl-forced-newline" /></th>
</tr>
<tr>
<td class="confluenceTd">Maven 2.2.1 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">3:20</td>
<td class="confluenceTd">53/99M</td>
</tr>
<tr>
<td class="confluenceTd">Maven 3.0.2 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">3:15</td>
<td class="confluenceTd">27/51M</td>
</tr>
</tbody>
</table>

<p><strong>&#8220;mvn package&#8221; on a corporate project (11 modules)</strong></p>

<table class="confluenceTable">
<tbody>
<tr>
<th class="confluenceTh"></th>
<th class="confluenceTh"> Time <br class="atl-forced-newline" /></th>
<th class="confluenceTh"> Memory <br class="atl-forced-newline" /></th>
</tr>
<tr>
<td class="confluenceTd">Maven 2.2.1 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">1:04 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">48/87M <br class="atl-forced-newline" /></td>
</tr>
<tr>
<td class="confluenceTd">Maven 3.0.2 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">0:54 <br class="atl-forced-newline" /></td>
<td class="confluenceTd">15/35M <br class="atl-forced-newline" /></td>
</tr>
</tbody>
</table>

<h3>Conclusion</h3>

<p>If you haven&#8217;t already tried Maven 3.0 I strongly recommend you to do so. As a release manager, tech lead, Maven guru, build monkey, or whatever your title is, doing a build of your project with Maven 3.0 will very quickly show you if there are any issues in switching. As installing Maven only requires unpacking a zip file and changing a symbolic link (or environment variable on Windows), it is something you can do in a couple of minutes.  Once you&#8217;ve experienced Maven 3, I doubt you want to go back to Maven 2.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2011/02/top-ten-reasons-to-move-to-maven-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

