<?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; Brian Fox</title>
	<atom:link href="http://www.sonatype.com/people/author/brian/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sonatype.com/people</link>
	<description>State-of-the-Art Build Production for the Modern Software Enterprise</description>
	<lastBuildDate>Mon, 30 Aug 2010 10:00:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Nexus 1.7.2 Now Available with Improved Search Interface</title>
		<link>http://www.sonatype.com/people/2010/08/nexus-1-7-2-now-available-with-improved-search-interface/</link>
		<comments>http://www.sonatype.com/people/2010/08/nexus-1-7-2-now-available-with-improved-search-interface/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 11:34:06 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[nexus pro]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5858</guid>
		<description><![CDATA[
		
		
		
		The Nexus 1.7.2 release offers an improved search interface making it even easier to locate the libraries and artifacts you need in Nexus.  Sonatype has published a version of Nexus 1.7.2 on http://repository.sonatype.org which contains some dramatic improvements to the search interface.   Download the new Nexus Open Source  or Nexus Professional release and [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/08/nexus-1-7-2-now-available-with-improved-search-interface/";
		var dzone_title = "Nexus 1.7.2 Now Available with Improved Search Interface";
		var dzone_style = "1";
		var dzone_blurb = "The Nexus 1.7.2 release offers an improved search interface making it even easier to locate the libraries and artifacts you need in Nexus.  Sonatype has published a version of Nexus 1.7.2 on http://repository.sonatype.org which contains some dramatic...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>The Nexus 1.7.2 release offers an improved search interface making it even easier to locate the libraries and artifacts you need in Nexus.  Sonatype has published a version of Nexus 1.7.2 on <a href="http://repository.sonatype.org">http://repository.sonatype.org</a> which contains some dramatic improvements to the search interface.   Download the new <a href="http://nexus.sonatype.org">Nexus Open Source </a> or <a href="http://www.sonatype.com/products/nexus">Nexus Professional</a> release and start searching for artifacts.</p>

<p>What is new in the Nexus 1.7.2 search interface?</p>

<ul>
    <li>Search results now link directly to the latest version of a matching artifact.</li>
    <li>Selecting a search result immediately displays information about the matching artifact.  You can browse artifact information from the search interface.</li>
    <li>(Nexus Professional) Archive browsing and artifact metadata are available from the search interface.</li>
    <li>Matching artifacts of different types (pom, jar, war, zip, etc.) can be downloaded from the search results page.</li>
</ul>

<p>This release takes the effort out of searching for artifacts in Nexus.  Here are some sceenshots of the new interface now available on <a href="http://repository.sonatype.org">http://repository.sonatype.org</a> and soon to be available in the 1.7.2 release of <a href="http://nexus.sonatype.org">Nexus Open Source</a> and <a href="http://www.sonatype.com/products/nexus">Nexus Professional</a>.</p>

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

<p>If you are searching for artifacts in Nexus, start with either the Advanced Search interface or the Welcome panel shown below.    This Welcome panel is the first thing you will see when you load Nexus in the browser, to see the welcome screen go to <a href="http://repository.sonatype.org">http://repository.sonatype.org</a>.</p>

<p style="text-align: center;"><a href="http://www.sonatype.com/people/wp-content/uploads/2010/07/search-welcome.png"><img class="aligncenter size-full wp-image-5859" title="search-welcome" src="http://www.sonatype.com/people/wp-content/uploads/2010/07/search-welcome.png" alt="" width="598" height="337" /></a>To search for an artifact, just type in a keyword.  A keyword can be a groupId, an artifactId, or just the name of a project.   If you were searching for the latest version of the Guice library, you would type in &#8220;guice&#8221; in the Welcome panel and either press Return or click on the search icon to the right of the search box.    Searching for Guice will show the following result panel.</p>

<p style="text-align: center;"><a href="http://www.sonatype.com/people/wp-content/uploads/2010/07/search-results.png"><img class="aligncenter size-full wp-image-5860" title="search-results" src="http://www.sonatype.com/people/wp-content/uploads/2010/07/search-results.png" alt="" width="611" height="414" /></a></p>

<p>What&#8217;s new in this interface?</p>

<ul>
    <li>Look at the Version column in the search results.   In this version of the search interface, we decided to list the most recent version.    If you need to view a different version, click on &#8220;Show All Versions&#8221;.   Clicking on &#8220;Show All Versions&#8221; will drill down into the list of available versions.</li>
    <li>Look at the Download column in the search results.   This Download column contains direct download links for the most recent version of the artifact.   To download a matching artifact, just click on a link in this column.</li>
    <li>Select a search result, and you will see the artifact in the Repository Tree in the lower left-hand quadrant of this interface.   This is helpful to give you context for an artifact.   An artifact could be present in more than one repository.  If this is the case, click on the value next to &#8220;Viewing Repository&#8221; to switch between multiple matching repositories.</li>
    <li>In the lower right-hand quadrant of the interface, you will see a number of tabs which show information about the selected search result:
<ul>
    <li>Maven Information: This contains basic identifiers and a snippet of XML you can use to add this artifact as a project dependency.</li>
    <li>Archive Browser (Nexus Professional): This gives you a way to explore the contents of an archive in the repository.  You can view the files and folders contained in a matching search result.</li>
    <li>Artifact Information: This tab contains timestamps, file size, checksum values, and a list of repositories containing a given artifact.</li>
    <li>Artifact Metadata (Nexus Professional): This tab shows all of the built-in and custom metadata associated with an artifact.</li>
</ul>
</li>
</ul>

<p>This new search interface will be a part of the Nexus 1.7.2 search interface available in both <a href="http://nexus.sonatype.org">Nexus Open Source </a>and <a href="http://www.sonatype.com/products/nexus">Nexus Professional</a>.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/08/nexus-1-7-2-now-available-with-improved-search-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-level Staging and Build Promotion with Nexus Pro 1.7</title>
		<link>http://www.sonatype.com/people/2010/07/multi-level-staging-and-build-promotion-with-nexus-pro-1-7/</link>
		<comments>http://www.sonatype.com/people/2010/07/multi-level-staging-and-build-promotion-with-nexus-pro-1-7/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 15:06:29 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[multi-level staging]]></category>
		<category><![CDATA[nexus pro]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[staging]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5739</guid>
		<description><![CDATA[
		
		
		
		With the 1.7.1 release Nexus Professional now supports multi-level staging and build                         promotion.   With our existing staging plugin, you can release build artifacts to a temporary staging repository to allow for [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/07/multi-level-staging-and-build-promotion-with-nexus-pro-1-7/";
		var dzone_title = "Multi-level Staging and Build Promotion with Nexus Pro 1.7";
		var dzone_style = "1";
		var dzone_blurb = "With the 1.7.1 release Nexus Professional now supports multi-level staging and build                         promotion.   With our existing staging plugin, you can release build artifacts to a temporary staging repository to allow for testing and certification...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>With the 1.7.1 release <a href="http://www.sonatype.com/products/nexus">Nexus Professional</a> now supports multi-level staging and build                         promotion.   With our existing staging plugin, you can release build artifacts to a temporary staging repository to allow for testing and certification before making a final decision to release artifacts to a hosted repository.   With multi-level staging, you can add additional steps to your release process.   If you need multiple levels of testing or validation, you can now define both staging profiles and &#8220;build promotion&#8221; profiles.</p>

<p>When you stage an artifact in Nexus Professional, Nexus creates a temporary staging repository and exposes staged artifacts in a repository group.   When you promote a staging repository with a build promotion profile, you can configure Nexus to add promoted artifacts to additional repository groups.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/07/multi-level-staging.png"><img class="aligncenter size-full wp-image-5762" title="multi-level-staging" src="http://www.sonatype.com/people/wp-content/uploads/2010/07/multi-level-staging.png" alt="" width="472" height="192" /></a></p>

<p><span id="more-5739"></span>To explore this new feature of Nexus Professional, consider the following workflow illustrated in the previous figure :</p>

<div>
<ul type="disc">
    <li><em>Stage:</em> A developer publishes artifacts to                                      a QA staging profile which exposes the staged artifacts in a QA                                      repository group.</li>
    <li><em>Promote to Beta:</em> Once the QA team has completed testing, they promote the temporary staging                                      repository to build promotion profile exposing the staged                                      artifacts to a limited set of customers who have agreed to act as a                                      beta testers.</li>
    <li><em>Release:</em> Once this closed beta testing                                      period is finished, the staged repository is then released.  The                                      artifacts it contains are published to a hosted release repository                                      and exposed via the public repository group.</li>
</ul>
To support this multi-level staging feature, configure a                        Build Promotion profiles to expose promoted release artifacts to additional repository groups.  Build promotion profiles are configured alongside Staging profiles in the Staging Profiles panel.<img class="aligncenter" title="Creating a Build Promotion Profile" src="http://www.sonatype.com/books/nexus-book/reference/figs/web/staging_add-build-promotion-orilfe.png" alt="" width="351" height="151" />When you create a Build Promotion profile, you configure it to expose promoted artifacts via selected repository groups.<img class="aligncenter" title="Configuring a Build Promotion Profile" src="http://www.sonatype.com/books/nexus-book/reference/figs/web/staging_closed-beta-promotion-group.png" alt="" width="596" height="529" />When you need to promote a Staging Repository to a Build Promotion Profile, you select the Staging Repositories to promote and click on the Promote button.<img class="aligncenter" title="Promoting a Staging Repository" src="http://www.sonatype.com/books/nexus-book/reference/figs/web/staging_promote-to-group-button.png" alt="" width="605" height="285" />After clicking Promote, you can then select a Build Promotion profile.<img class="aligncenter" title="Selecting a Build Promotion Profile" src="http://www.sonatype.com/books/nexus-book/reference/figs/web/staging_promote-to-group.png" alt="" width="426" height="291" />

For more information about Nexus Professional&#8217;s support see <a href="http://www.sonatype.com/books/nexus-book/reference/staging.html#d4e4143">&#8220;Multi-level Staging and Build Promotion&#8221;</a>, and <a href="http://www.sonatype.com/books/nexus-book/reference/staging-sect-config.html#staging-sect-config-build-profile">&#8220;Configuring Build Promotion Profiles&#8221;</a> in the Sonatype Nexus book.

</div>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/07/multi-level-staging-and-build-promotion-with-nexus-pro-1-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s New in Nexus Open Source 1.7.0?</title>
		<link>http://www.sonatype.com/people/2010/06/whats-new-in-nexus-open-source-1-7-0/</link>
		<comments>http://www.sonatype.com/people/2010/06/whats-new-in-nexus-open-source-1-7-0/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 13:39:53 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[nexus open source]]></category>
		<category><![CDATA[nexus professional]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5622</guid>
		<description><![CDATA[
		
		
		
		Sonatype is happy to announce the availability of Nexus 1.7. We&#8217;ve cut a new release for both Nexus Open Source and Nexus Professional. This post walks through the changes introduced to Nexus Open Source. 


New Features in Nexus Open Source

With this release, Nexus Open Source gains the following features:


    Improved, Drill Down Artifact [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/06/whats-new-in-nexus-open-source-1-7-0/";
		var dzone_title = "What&#8217;s New in Nexus Open Source 1.7.0?";
		var dzone_style = "1";
		var dzone_blurb = "Sonatype is happy to announce the availability of Nexus 1.7. We&#8217;ve cut a new release for both Nexus Open Source and Nexus Professional. This post walks through the changes introduced to Nexus Open Source. New Features in Nexus Open SourceWith this...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><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>Sonatype is happy to announce the availability of Nexus 1.7. We&#8217;ve cut a new release for both Nexus Open Source and Nexus Professional. This post walks through the changes introduced to Nexus Open Source. 
<span id="more-5622"></span></p>

<h2>New Features in Nexus Open Source</h2>

<p>With this release, Nexus Open Source gains the following features:</p>

<ul>
    <li>Improved, Drill Down Artifact Search Interface</li>
    <li>Repository Groups can contain both Repositories and other Repository Groups</li>
</ul>

<h3>Improved, Drill Down Artifact Search Inteface</h3>

<p>When you search for artifacts in Nexus 1.7 you will be presented with a drill down search interface. We made this change to make it easier to search for artifacts, which might return hundreds of results. Using the drill down search inteface, you can quickly navigate to just the artifacts you are interested in.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/06/search-initial.png"><img class="aligncenter size-full wp-image-5623" title="search-initial" src="http://www.sonatype.com/people/wp-content/uploads/2010/06/search-initial.png" alt="" width="640" /></a></p>

<p><strong>NOTE: </strong></p>

<p>We have changed the local format of the lucene indexes, it is required that users reindex all repositories in their Nexus server to start benefitting from the changes (and for search to work properly).</p>

<h3>Groups of Groups</h3>

<p>Repository Groups can now contain other Repository Groups. This change has already come in handy for developers who want to create variations of the standard public repository group. If you have a series of repository groups which are all similar, you can capture these similarities in another group.</p>

<p>Sonatype is continually making efforts to improve Nexus and make investments in the open source community.  Stay tuned for new features in Nexus Professional.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/06/whats-new-in-nexus-open-source-1-7-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nexus 1.6 introduces Auto blocking unreachable remote repositories</title>
		<link>http://www.sonatype.com/people/2010/04/nexus-1-6-introduces-auto-blocking-unreachable-remote-repositories/</link>
		<comments>http://www.sonatype.com/people/2010/04/nexus-1-6-introduces-auto-blocking-unreachable-remote-repositories/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 14:20:02 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[nexus 1.6]]></category>
		<category><![CDATA[repository manager]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5228</guid>
		<description><![CDATA[
		
		
		
		In Nexus 1.6, we reintroduced a useful little feature that had been available in early 1.0 betas: The ability to have Nexus auto block proxies that are unreachable. What&#8217;s improved in this version is the ability to control this feature and the fact that it will auto unblock the repo once it becomes reachable again.

Whenever [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/04/nexus-1-6-introduces-auto-blocking-unreachable-remote-repositories/";
		var dzone_title = "Nexus 1.6 introduces Auto blocking unreachable remote repositories";
		var dzone_style = "1";
		var dzone_blurb = "In Nexus 1.6, we reintroduced a useful little feature that had been available in early 1.0 betas: The ability to have Nexus auto block proxies that are unreachable. What&#8217;s improved in this version is the ability to control this feature and the fact...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>In Nexus 1.6, we reintroduced a useful little feature that had been available in early 1.0 betas: The ability to have Nexus auto block proxies that are unreachable. What&#8217;s improved in this version is the ability to control this feature and the fact that it will auto unblock the repo once it becomes reachable again.</p>

<p>Whenever an artifact is downloaded from a proxy repository, it is automatically cached locally and used to serve subsequent requests. Nexus will continue to serve the artifact until it expires based on the configuration (release artifact typically never expire).</p>

<p>When new artifacts are being requested that Nexus has never seen before, it will look in the proxies to locate it (this behavior can be optimized with routing rules). If the remote request times out, Nexus by default will check two more times before giving up. This is usually enough to handle transient network glitches. If however, the repository is down for an extended period of time, all these retries can back up the connections and slow down over all performance. This is where the auto block comes in.</p>

<p><span id="more-5228"></span>Whenever Nexus detects a connection is timing out, or receives repeated failures from the remote (for example 500 errors), it will mark this repository as unavailable. All subsequent requests to this proxy will be served from the local cache only. In almost all cases, this is sufficient for your builds to continue unaffected.</p>

<p>Once a repository is marked unavailable, a thread is spawned to proactively monitor its status. In this first release, we wanted to make this feature easy to use and not introduce too many confusing configuration options. We chose a fibinaci type of behavior as the best way to monitor the remote, balancing responsiveness and not pounding the remote with repeated requests at the same time (since we deal with constant abuse of Central, we are sensitive to making Nexus a good repository citizen). We start with a delay of 10 seconds before rechecking the remote, then it will check again in 20,30,50,80,130 seconds, each time adding the delay of the two previous checks. Obviously the administrator can force a proxy to be available again at any time.</p>

<p>In the Nexus server configuration panel, it is possible to define an email address that should be notified of system events. The autoblock feature uses this address to notify of remote repository status changes. To avoid spamming the user for connections that may be flakey, we won&#8217;t notify until two retries have failed (ie 30 seconds + the 3 attempts that triggered the blockage). Once the repo is back up, the administrator is also notified.</p>

<p>Nexus monitors the status of a repository by issuing HEAD and GET requests against the root url of the repository. Some systems may not respond correctly to this request, rendering the monitoring ineffective. If you have this type of repository defined, or have a known flaky connection, you may disable the auto blocking feature in the proxy configuration.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/04/nxpro-auto-blocking.png"><img class="aligncenter size-full wp-image-5024" title="nxpro-auto-blocking" src="http://www.sonatype.com/people/wp-content/uploads/2010/04/nxpro-auto-blocking.png" alt="" width="668" height="322" /></a></p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/04/nexus-1-6-introduces-auto-blocking-unreachable-remote-repositories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss Switches to Nexus Professional</title>
		<link>http://www.sonatype.com/people/2010/04/jboss-switches-to-nexus-professional/</link>
		<comments>http://www.sonatype.com/people/2010/04/jboss-switches-to-nexus-professional/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 10:07:56 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[nexus professional]]></category>
		<category><![CDATA[repository manager]]></category>
		<category><![CDATA[Sonatype]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5086</guid>
		<description><![CDATA[
		
		
		
		Over the weekend, the JBoss repository team put the final pieces in place to complete the switch to Nexus Pro. We&#8217;ve been working with them since early this year to perform analysis and tool support for the conversion. Their team performed very diligent testing of the entire system prior to the conversion. Kudos to Paul [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/04/jboss-switches-to-nexus-professional/";
		var dzone_title = "JBoss Switches to Nexus Professional";
		var dzone_style = "1";
		var dzone_blurb = "Over the weekend, the JBoss repository team put the final pieces in place to complete the switch to Nexus Pro. We&#8217;ve been working with them since early this year to perform analysis and tool support for the conversion. Their team performed very...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><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>Over the weekend, the JBoss repository team put the final pieces in place to complete the switch<a href="http://in.relation.to/Bloggers/JBossMavenRepositoryChanges" target="_blank"> to Nexus Pro</a>. We&#8217;ve been working with them since early this year to perform analysis and tool support for the conversion. Their team performed very <a href="http://community.jboss.org/wiki/MavenRepositoryTestResults">diligent testing</a> of the entire system prior to the conversion. Kudos to Paul for such an orderly and thorough process. The timing of the production switch is great because we are nearly done helping to clean up the Java.net repositories.</p>

<p>Historically the JBoss and Java.net repositories have been painful for Maven users. The reasons for this pain differed in each case, but overall these repositories have affected a large section of the community because of the popularity of the artifacts they contain.</p>

<p>The JBoss repository generally had decent metadata and release practices.  The major concern in this repo was that the single repository contained artifacts in the following categories:
1) JBoss original artifacts
2) Copies of artifacts from other repositories
3) Artifacts with the same coordinates as artifacts in another repository, but that had been patched or otherwise altered</p>

<p>Ideally the repository should have contained only artifacts in category 1. Category 3 is what caused the most pain, because as soon as you pulled some artifacts from the JBoss repo, you potentially could get &#8220;polluted&#8221; with these altered artifacts.</p>

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

<p>We worked with the JBoss team to develop tools that could scan the repository, and categorize all the artifacts into the categories described above. Using that information, we where able to separate them into unique repositories in the new Nexus Pro repo, meaning now you can select which artifacts you want to include based on the url you use. Nexus&#8217; ability to logically group repositories allows JBoss to merge these now separated repos back into a view that matches the old repo, making the migration transparent for existing users.</p>

<p>The problem with the <a href="http://java.net/">java.net</a> repo is more complicated. In addition to all of the problems described above, this repository suffers from a lack of oversight and quality. We found thousands of artifacts that referred to repositories that no longer existed, that contained snapshot dependencies, that weren&#8217;t in the proper folders, and so on. This problem has taken one of our developers almost a month to sort out, but it&#8217;s finally just about done. These artifacts will be synced into Central, and we are working with Oracle to prepare a Nexus Pro instance that can be the deployment location for these projects going forward.</p>

<p>In addition to the repository cleanup, the JBoss (and soon <a href="http://java.net/">java.net</a>) projects are now able to use the Staging and Promotion tools in Nexus Pro that are used in many other OSS forges like Apache, Codehaus, Scala-tools, and Terracotta. This allows developers to stage a release, have automated quality checks occur, and perform their voting and validation phase before promoting the artifacts to the public release repository. This process makes it dead simple to ensure that the basic quality of the releases is maintained.  This helps the entire community, which is why we make Nexus Pro available to OSS projects for free.</p>

<p>For projects that are too small, or otherwise don&#8217;t want to host their own instance of Nexus Pro, we maintain an instance at <a href="http://oss.sonatype.org/">http://oss.sonatype.org</a>.  Here, any OSS project can sign up (<a href="http://nexus.sonatype.org/oss-repository-hosting.html">http://nexus.sonatype.org/oss-repository-hosting.html</a>) and gain all the benefits of a managed repository, including dedicated Sonatype assistance with their builds. We have almost 400 projects using this instance, including Amazon Web Tools, Google App Engine, Google Inject, Jetty, and many more. Users of this system are able to get their releases published to Central in less than an hour, once they are configured to pass the automated quality checks.  It&#8217;s never been easier or faster for projects to release their artifacts to Central.</p>

<p>Based on the outstanding adoption rate of our tools in the community, it is clear that project development teams of all sizes really want to provide a quality product for their users in the form of clean artifacts and metadata. This just wasn&#8217;t easy to do in the past. Sonatype is making it a priority to empower these projects by providing first class tools and self-serve access to Central.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/04/jboss-switches-to-nexus-professional/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What&#8217;s New in Nexus 1.6</title>
		<link>http://www.sonatype.com/people/2010/04/whats-new-in-nexus-1-6/</link>
		<comments>http://www.sonatype.com/people/2010/04/whats-new-in-nexus-1-6/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 13:49:35 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[nexus 1.6]]></category>
		<category><![CDATA[respository managers]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5023</guid>
		<description><![CDATA[
		
		
		
		Sonatype is happy to announce the availability of Nexus 1.6. We&#8217;ve cut a new release for both Nexus Open Source and Nexus Professional. This post walks through the changes introduced to both Nexus Open Source and Nexus Professional.  Nexus Open Source now supports auto block/unblock for remote repositories which may become unavailable, and Nexus Professional adds [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/04/whats-new-in-nexus-1-6/";
		var dzone_title = "What&#8217;s New in Nexus 1.6";
		var dzone_style = "1";
		var dzone_blurb = "Sonatype is happy to announce the availability of Nexus 1.6. We&#8217;ve cut a new release for both Nexus Open Source and Nexus Professional. This post walks through the changes introduced to both Nexus Open Source and Nexus Professional.  Nexus Open...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><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>Sonatype is happy to announce the availability of Nexus 1.6. We&#8217;ve cut a new release for both Nexus Open Source and Nexus Professional. This post walks through the changes introduced to both Nexus Open Source and Nexus Professional.  Nexus Open Source now supports auto block/unblock for remote repositories which may become unavailable, and Nexus Professional adds some new configuration fields for the Staging Suite.  In addition to these new features, Nexus has now completed the transition to Guice, and we are providing 100% documentation coverage of the Nexus REST API.<span id="more-5023"></span></p>

<h2>New Features in Nexus Open Source</h2>

<p>With this release, Nexus Open Source gains the following features:</p>

<ul>
    <li>Auto Block/Unblock of Unreachable Remote Repositories</li>
    <li>Changes to the Default Group Configuration</li>
    <li>A User Interface for Filing Issues and Problem Reports</li>
</ul>

<h3>Auto Block/Unblock of Unreachable Remote Repositories</h3>

<p>What happens when Nexus is unable to reach a remote repository? If you&#8217;ve defined a proxy repository, and the remote repository is unavailable Nexus will now automatically block the remote repository. Once a repository has been auto-blocked, Nexus will then periodically retest the remote repository and unblock the repository once it becomes available. You can control this behavior by changing the Auto-blocking Active setting under the Remote Repository Access section of the proxy repository configuration as shown in the following figure:</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/04/nxpro-auto-blocking.png"><img class="aligncenter size-full wp-image-5024" title="nxpro-auto-blocking" src="http://www.sonatype.com/people/wp-content/uploads/2010/04/nxpro-auto-blocking.png" alt="" width="668" height="322" /></a></p>

<h3>Changed Default Groups Configuration</h3>

<p>We&#8217;ve removed &#8220;public snapshots&#8221; group from the default configuration that ships with Nexus. In Nexus 1.6, the only default repository group is the &#8220;Public&#8221; group. While the initial versions of Nexus had a separate group for snapshots, it is a better strategy to point all of your developer workstations at a single repository group.</p>

<p><img class="aligncenter size-full wp-image-5026" title="nxpro-default-config" src="http://www.sonatype.com/people/wp-content/uploads/2010/04/nxpro-default-config.png" alt="" width="373" height="285" /></p>

<h3>Generating a Nexus Problem Report</h3>

<p>We wanted to make it very easy for users to file issues in our JIRA instance. If you encounter a bug or an error in JIRA, or if you have a suggestion, you can now file a report directly from your Nexus instance.   In Nexus 1.6, you can click on &#8220;File Issue&#8221; in the Nexus menu, supply your Sonatype JIRA credentials, and file a problem report.</p>

<p><img class="aligncenter size-full wp-image-5025" title="nxpro-generate-report" src="http://www.sonatype.com/people/wp-content/uploads/2010/04/nxpro-generate-report.png" alt="" width="447" height="538" /></p>

<h2>Updates to Nexus Professional 1.6.0</h2>

<p>A total of 59 issues were filed against Nexus Pro 1.6.0. Among the major improvements in Nexus Pro:</p>

<ul>
    <li>Conversion from Plexus to Guice</li>
    <li>A Staging Profile can now define a target promotion repository</li>
    <li>The POM Validating Rule in the Staging Ruleset now validates a project&#8217;s Parent POM</li>
    <li>POM Validation now tests for the presence of plugin Repositories and repositories.</li>
</ul>

<h3>Nexus Staging Profile Configuration Parameters</h3>

<p style="text-align: center;"><img class="aligncenter size-full wp-image-5028" title="staging_profile-edit" src="http://www.sonatype.com/people/wp-content/uploads/2010/04/staging_profile-edit.png" alt="" width="405" height="394" /></p>

<p>In Nexus 1.5, there was no way to associate a Staging Profile with a specific target promotion repository, the user performing a promotion had to select a target hosted repository when they were promoting a staging repository.   In Nexus 1.6, you can define an optional &#8220;Promotion Repository&#8221; when you define a Staging Profile.   If the Promotion Repository isn&#8217;t set, the promotion will still ask the user to choose a promotion repository upon promotion.   If the Promotion Repository is set, all artifacts promoted from this Staging Profile will be promoted to a specified promotion repository.</p>

<h3>Improved POM Validation Rules</h3>

<p>The POM Validation Ruleset has been modified to validate information in a project&#8217;s parent POM.</p>

<h2>Complete Nexus REST Documentation</h2>

<p>With Nexus 1.6, we have also fully documented the Nexus REST API with Enunciate.   REST documentation is not yet bundled with Nexus, look for a future release to bundle all of this reference installation and serve it directly from your Nexus instance.   For now, you read <a href="https://grid.sonatype.org/ci/view/Nexus/job/Nexus/label=ubuntu/ws/trunk/nexus/nexus-rest-api/target/classes/docs/index.html">full documentation of the Nexus REST API</a> from the Sonatype web site.</p>

<h2>Nexus is Now Powered by Google&#8217;s Guice</h2>

<p>In addition to these important features, Nexus has now completely migrated from Plexus to Guice, a lightweight dependency injection framework developed by Google.  If you are a Nexus user, you won&#8217;t notice any differences between the Plexus-based Nexus 1.5 and the Guice-based Nexus 1.6.    As we&#8217;ve discussed in previous blog entries <a href="http://www.sonatype.com/people/2010/01/from-plexus-to-guice-1-why-guice/">switching to Guice is part of a long-term strategy</a>, moving to Guice will allow us to devote more of our resources to Nexus features development and less resources to maintaining Plexus.</p>

<h2>Downloading and Installing Nexus 1.6</h2>

<p>If you are new to repository management, Nexus is, by far, the easiest repository to install. All you need to do is download a distribution, unpack the Nexus archive, and run a simple script. Watch a demonstration of the installation process <a href="http://www.youtube.com/sonatype#p/u/23/m68L8KvbSNk">on Linux</a> and <a href="http://www.youtube.com/watch?v=bLskAeXivPg">on Windows</a>.</p>

<ul>
    <li>Download Nexus Open Source 1.6</li>
    <li>Download Nexus Professional 1.6</li>
</ul>

<h3>Upgrading to Nexus 1.6</h3>

<p>We&#8217;ve changed the location of configuration files for the Java Service Wrapper startup scripts. You can see these differences if you list the contents of ${NEXUS_HOME}/bin/jsw. On a Nexus 1.5 installation you would see this:</p>

<pre>/usr/local/nexus-professional-webapp-1.5.0 $ ls ./bin/jsw/
jsw-license/         linux-x86-64/        solaris-sparc-64/
linux-ppc-64/        macosx-universal-32/ solaris-x86-32/
linux-x86-32/        solaris-sparc-32/    windows-x86-32/</pre>

<p>Now, on a Nexus 1.6 installation, the same directory contains different configuration folders and platform options:</p>

<pre>/usr/localnexus-professional-webapp-1.6.0 $ ls ./bin/jsw/
conf/                linux-x86-32/        solaris-sparc-32/
lib/                 linux-x86-64/        solaris-sparc-64/
license/             macosx-universal-32/ solaris-x86-32/
linux-ppc-64/        macosx-universal-64/ windows-x86-32/</pre>

<p>If you are upgrading from a Nexus 1.5 instance to a Nexus 1.6 instance you will need to make sure that you are using the latest &#8220;nexus&#8221; script in the appropriate platform folder. If you previously installed Nexus on a Linux system and copied the ./bin/jsw/(platform)/nexus startup script to the /etc/init.d directory you will need to make sure that you copy the newer version of this nexus script (or create a symbolic link to the newer version of the script).</p>

<p>If you&#8217;ve made customizations to your startup script, the important configuration parameter to update is WRAPPER_CONF. In a Nexus 1.5 installation, the WRAPPER_CONF has the following value:</p>

<pre>WRAPPER_CONF="../../../conf/wrapper.conf"</pre>

<p>This should be changed to the following value in Nexus 1.6:</p>

<pre>WRAPPER_CONF="../conf/wrapper.conf"</pre>

<p>If you have customized the wrapper.conf, merge your changes into the new one instead of copying it, we&#8217;ve made several updates to the paths and set some default timeouts that you should pick up.     We can&#8217;t emphasize this point enough, do not just copy your own customized version of wrapper.conf atop the newer version.</p>

<p>In addition to this simple configuration change, you should also take note of the additional platform now available in the ./bin/jsw directory: macosx-universal-64. If you are running Nexus on a 64-bit OSX platform, you should start using this startup script instead of macosx-universal-32.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/04/whats-new-in-nexus-1-6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Why external repos are being phased out of Central</title>
		<link>http://www.sonatype.com/people/2010/03/why-external-repos-are-being-phased-out-of-central/</link>
		<comments>http://www.sonatype.com/people/2010/03/why-external-repos-are-being-phased-out-of-central/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 15:31:25 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Sonatype]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=4749</guid>
		<description><![CDATA[
		
		
		
		We recently started raising the minimum criteria for artifacts coming into Central:


    Blind rsync transfers of random repositories are no longer being added and will be phased out over time
    All artifacts must be properly signed with GPG signatures that are publicly verifiable
    sources and javadocs [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/03/why-external-repos-are-being-phased-out-of-central/";
		var dzone_title = "Why external repos are being phased out of Central";
		var dzone_style = "1";
		var dzone_blurb = "We recently started raising the minimum criteria for artifacts coming into Central:    Blind rsync transfers of random repositories are no longer being added and will be phased out over time    All artifacts must be properly signed with GPG signatures...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>We recently started raising the minimum criteria for artifacts coming into Central:</p>

<ul>
    <li>Blind rsync transfers of random repositories are no longer being added and will be phased out over time</li>
    <li>All artifacts must be properly signed with GPG signatures that are publicly verifiable</li>
    <li>sources and javadocs must be included</li>
    <li>scm urls must be included</li>
    <li>No external repository definitions</li>
</ul>

<p>That last one seems to cause the most commotion for users that depend on artifacts not currently in Central and I wanted to take this opportunity to show why this is being done.</p>

<p>The urls you see below are listed as RELEASE repositories found in the poms of a prominent repo we&#8217;re attempting to clean for syncing to Central. In the list below you will find some interesting bits:</p>

<ul>
    <li> file based urls</li>
    <li> urls with private ip subnets</li>
    <li> snapshot repositories (remember this is a list of the RELEASE repos only according to the poms</li>
    <li> Links to websites (like [http://maven.apache.org]) or wikis</li>
    <li> Many sites that no longer exist</li>
    <li> Repositories that are actually mirrors of Central (Ibiblio)</li>
    <li> Repositories who&#8217;s contents are already in Central (codehaus)</li>
</ul>

<p>Of the few repositories that actually do still work, many of them have what I would  call &#8220;garbage&#8221; in them. I&#8217;ll define garbage here as things that didn&#8217;t originate from this project and are either hacked/patched versions and/or duplicates of artifacts that are found somewhere else.</p>

<p>When you start blindly using these repos, best case you could get artifacts who&#8217;s provenance is suspect and your builds are slowed down because Maven is sent off on a wild goose chase. Worst case, you still have to find these repos by hand and override the bad urls.</p>

<p>In the list below, I think my favorite is the dynamic search of a Fisheye repository at Atlassian.com. I&#8217;m sure they love having thousands of builds doing automated searches of their Fisheye service looking for every artifact in a build.</p>

<ul>
    <li>file://${basedir}/src/repository</li>
    <li>file:${brillien_basedir}/../lib</li>
    <li>file:${project.basedir}/lib</li>
    <li>file:${project.basedir}/lib/</li>
    <li><a href="http://10.5.5.82:8081/artifactory/plugins-releases" target="_blank">http://10.5.5.82:8081/artifactory/plugins-releases</a></li>
    <li><a href="http://10.5.5.82:8081/artifactory/plugins-snapshots" target="_blank">http://10.5.5.82:8081/artifactory/plugins-snapshots</a></li>
    <li><a href="http://archiva.openqa.org/repository/releases/" target="_blank">http://archiva.openqa.org/repository/releases/</a></li>
    <li><a href="http://artifact-repo.int.gestalt-llc.com:8080/archiva/repository/nct-core-releases" target="_blank">http://artifact-repo.int.gestalt-llc.com:8080/archiva/repository/nct-core-releases</a></li>
    <li><a href="http://artifact-repo.int.gestalt-llc.com:8080/archiva/repository/nct-core-snapshots" target="_blank">http://artifact-repo.int.gestalt-llc.com:8080/archiva/repository/nct-core-snapshots</a></li>
    <li><a href="http://artifact-repo.int.gestalt-llc.com:8080/archiva/repository/repo" target="_blank">http://artifact-repo.int.gestalt-llc.com:8080/archiva/repository/repo</a></li>
    <li><a href="http://bits.netbeans.org/maven2" target="_blank">http://bits.netbeans.org/maven2</a></li>
    <li><a href="http://cvs.apache.org/maven-snapshot-repository" target="_blank">http://cvs.apache.org/maven-snapshot-repository</a></li>
    <li><a href="http://developer.jasig.org/repo/content/groups/m2-legacy/" target="_blank">http://developer.jasig.org/repo/content/groups/m2-legacy/</a></li>
    <li><a href="http://dist.codehaus.org/mule/dependencies/maven2" target="_blank">http://dist.codehaus.org/mule/dependencies/maven2</a></li>
    <li><a href="http://download.csssprites.org/maven2/" target="_blank">http://download.csssprites.org/maven2/</a></li>
    <li><a href="http://download.java.net/javaee5/external/shared" target="_blank">http://download.java.net/javaee5/external/shared</a></li>
    <li><a href="http://download.oracle.com/maven" target="_blank">http://download.oracle.com/maven</a></li>
    <li><a href="http://easymock.org/maven/repository" target="_blank">http://easymock.org/maven/repository</a></li>
    <li><a href="http://egit.googlecode.com/svn/maven/snapshot-repository" target="_blank">http://egit.googlecode.com/svn/maven/snapshot-repository</a></li>
    <li><a href="http://fest.googlecode.com/svn/trunk/fest/m2/repository" target="_blank">http://fest.googlecode.com/svn/trunk/fest/m2/repository</a></li>
    <li><a href="http://fforw.de/m2repo/releases/" target="_blank">http://fforw.de/m2repo/releases/</a></li>
    <li><a href="http://fisheye4.atlassian.com/browse/%7Eraw,r=trunk/hudson/trunk/hudson/plugins/git/maven-repository" target="_blank">http://fisheye4.atlassian.com/browse/~raw,r=trunk/hudson/trunk/hudson/plugins/git/maven-repository</a></li>
    <li><a href="http://groovydice.sourceforge.net/m2repo" target="_blank">http://groovydice.sourceforge.net/m2repo</a></li>
    <li><a href="http://guiceyfruit.googlecode.com/svn/repo/releases" target="_blank">http://guiceyfruit.googlecode.com/svn/repo/releases</a></li>
    <li><a href="http://java.freehep.org/maven2" target="_blank">http://java.freehep.org/maven2</a></li>
    <li><a href="http://jets3t.s3.amazonaws.com/maven2" target="_blank">http://jets3t.s3.amazonaws.com/maven2</a></li>
    <li><a href="http://jflex.sourceforge.net/repo/" target="_blank">http://jflex.sourceforge.net/repo/</a></li>
    <li><a href="http://maven1.glassfishwiki.org/" target="_blank">http://maven1.glassfishwiki.org/</a></li>
    <li><a href="http://maven.apache.org/" target="_blank">http://maven.apache.org</a></li>
    <li><a href="http://maven.dyndns.org/2" target="_blank">http://maven.dyndns.org/2</a></li>
    <li><a href="http://maven.dyndns.org/glassfish/" target="_blank">http://maven.dyndns.org/glassfish/</a></li>
    <li><a href="http://maven.glassfish.org/content/groups/glassfish" target="_blank">http://maven.glassfish.org/content/groups/glassfish</a></li>
    <li><a href="http://maven.glassfish.org/content/groups/public/" target="_blank">http://maven.glassfish.org/content/groups/public/</a></li>
    <li><a href="http://maven.ocean.net.au/external" target="_blank">http://maven.ocean.net.au/external</a></li>
    <li><a href="http://maven.ocean.net.au/release" target="_blank">http://maven.ocean.net.au/release</a></li>
    <li><a href="http://maven.ocean.net.au/snapshot" target="_blank">http://maven.ocean.net.au/snapshot</a></li>
    <li><a href="http://maven.restlet.org/" target="_blank">http://maven.restlet.org</a></li>
    <li><a href="http://maven.sfbay/mirrors/java.net" target="_blank">http://maven.sfbay/mirrors/java.net</a></li>
    <li><a href="http://mirrors.ibiblio.org/pub/mirrors/maven2" target="_blank">http://mirrors.ibiblio.org/pub/mirrors/maven2</a></li>
    <li><a href="http://ndeloof.free.fr/maven2" target="_blank">http://ndeloof.free.fr/maven2</a></li>
    <li><a href="http://nexus.openqa.org/content/repositories/releases" target="_blank">http://nexus.openqa.org/content/repositories/releases</a></li>
    <li><a href="http://oss.repository.sonatype.org/content/groups/cometd" target="_blank">http://oss.repository.sonatype.org/content/groups/cometd</a></li>
    <li><a href="http://people.apache.org/maven-snapshot-repository" target="_blank">http://people.apache.org/maven-snapshot-repository</a></li>
    <li><a href="http://people.apache.org/%7Emrdon/repository/" target="_blank">http://people.apache.org/~mrdon/repository/</a></li>
    <li><a href="http://people.apache.org/repo/m2-incubating-repository" target="_blank">http://people.apache.org/repo/m2-incubating-repository</a></li>
    <li><a href="http://people.apache.org/repo/m2-snapshot-repository" target="_blank">http://people.apache.org/repo/m2-snapshot-repository</a></li>
    <li><a href="http://people.apache.org/repo/m2-snapshot-repository/" target="_blank">http://people.apache.org/repo/m2-snapshot-repository/</a></li>
    <li><a href="http://repo1.maven.org/maven2" target="_blank">http://repo1.maven.org/maven2</a></li>
    <li><a href="http://repo1.maven.org/maven2/" target="_blank">http://repo1.maven.org/maven2/</a></li>
    <li><a href="http://repo2.maven.org/maven2" target="_blank">http://repo2.maven.org/maven2</a></li>
    <li><a href="http://repo2.maven.org/maven/2" target="_blank">http://repo2.maven.org/maven/2</a></li>
    <li><a href="http://repo.aduna-software.org/maven2/releases" target="_blank">http://repo.aduna-software.org/maven2/releases</a></li>
    <li><a href="http://repo.ddsteps.org/maven/release/" target="_blank">http://repo.ddsteps.org/maven/release/</a></li>
    <li><a href="http://repo.nhncorp.com/maven2" target="_blank">http://repo.nhncorp.com/maven2</a></li>
    <li><a href="http://repo.opennms.org/maven2" target="_blank">http://repo.opennms.org/maven2</a></li>
    <li><a href="http://repository.codehaus.org/" target="_blank">http://repository.codehaus.org</a></li>
    <li><a href="http://repository.ops4j.org/maven2" target="_blank">http://repository.ops4j.org/maven2</a></li>
    <li><a href="http://repository.ops4j.org/maven2/" target="_blank">http://repository.ops4j.org/maven2/</a></li>
    <li><a href="http://scala-tools.org/repo-snapshots/" target="_blank">http://scala-tools.org/repo-snapshots/</a></li>
    <li><a href="https://games-darkstar.dev.java.net/nonav/snapshots" target="_blank">https://games-darkstar.dev.java.net/nonav/snapshots</a></li>
    <li><a href="https://hudson.dev.java.net/source/browse/*checkout*/hudson/hudson/main/lib" target="_blank">https://hudson.dev.java.net/source/browse/*checkout*/hudson/hudson/main/lib</a></li>
    <li><a href="https://m2proxy.atlassian.com/repository/public" target="_blank">https://m2proxy.atlassian.com/repository/public</a></li>
    <li><a href="https://maven2-repository.dev.java.net/nonav/repository" target="_blank">https://maven2-repository.dev.java.net/nonav/repository</a></li>
    <li><a href="https://maven2-repository.dev.java.net/nonav/repository/" target="_blank">https://maven2-repository.dev.java.net/nonav/repository/</a></li>
    <li><a href="https://maven.atlassian.com/content/groups/public/" target="_blank">https://maven.atlassian.com/content/groups/public/</a></li>
    <li><a href="https://maven-repository.dev.java.net/nonav/repository" target="_blank">https://maven-repository.dev.java.net/nonav/repository</a></li>
    <li><a href="https://maven-repository.dev.java.net/nonav/repository/" target="_blank">https://maven-repository.dev.java.net/nonav/repository/</a></li>
    <li><a href="https://maven-repository.dev.java.net/repository" target="_blank">https://maven-repository.dev.java.net/repository</a></li>
    <li><a href="https://maven-repository.dev.java.net/repository/" target="_blank">https://maven-repository.dev.java.net/repository/</a></li>
    <li><a href="http://snapshots.jboss.org/maven2" target="_blank">http://snapshots.jboss.org/maven2</a></li>
    <li><a href="http://snapshots.repository.codehaus.org/" target="_blank">http://snapshots.repository.codehaus.org/</a></li>
    <li><a href="http://source.db4o.com/maven" target="_blank">http://source.db4o.com/maven</a></li>
    <li><a href="http://sshd.googlecode.com/svn/m2-repo" target="_blank">http://sshd.googlecode.com/svn/m2-repo</a></li>
    <li><a href="http://svn.apache.org/repos/asf/servicemix/m2-repo" target="_blank">http://svn.apache.org/repos/asf/servicemix/m2-repo</a></li>
    <li><a href="http://svn.magnolia.info/maven/m2" target="_blank">http://svn.magnolia.info/maven/m2</a></li>
    <li><a href="http://svn.sonatype.org/flexmojos/repository/" target="_blank">http://svn.sonatype.org/flexmojos/repository/</a></li>
    <li><a href="http://tek42.com/maven2" target="_blank">http://tek42.com/maven2</a></li>
    <li><a href="http://wicketstuff.org/maven/repository" target="_blank">http://wicketstuff.org/maven/repository</a></li>
    <li><a href="http://www.agilejava.com/maven/" target="_blank">http://www.agilejava.com/maven/</a></li>
    <li><a href="http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo" target="_blank">http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo</a></li>
    <li><a href="http://www.eviware.com/repository/maven2/" target="_blank">http://www.eviware.com/repository/maven2/</a></li>
    <li><a href="http://www.ibiblio.org/maven" target="_blank">http://www.ibiblio.org/maven</a></li>
    <li><a href="http://www.ibiblio.org/maven2" target="_blank">http://www.ibiblio.org/maven2</a></li>
    <li><a href="http://www.ibiblio.org/maven2/" target="_blank">http://www.ibiblio.org/maven2/</a></li>
    <li><a href="http://yusuke.homeip.net/maven2" target="_blank">http://yusuke.homeip.net/maven2</a></li>
</ul>

<p>When we sync these poms to Central, it is highly likely we will simply ditch all of these references. We don&#8217;t take changing poms likely, but in this case it is clearly the lesser of two evils. Having the ability to leverage artifacts in some other repo is a nice fix in the moment, but once you release your project this way, you forever become a slave to that project maintaining the repo.</p>

<p>In order to improve the experience for everyone, we are working to block this from happening in Central. We have <a href="http://www.sonatype.com/people/2010/01/nexus-oss-ecosystem/">several</a> <a href="http://www.sonatype.com/people/2009/06/publishing-your-artifacts-to-the-central-maven-repository/">efforts</a> underway to help <a href="http://www.sonatype.com/people/2010/02/java-net-maven-repository-rescue-mission-on-march-5th/">minimize</a> this impact, and that primarily includes <a href="http://nexus.sonatype.org/oss-repository-hosting.html">making it easier to get your artifacts</a> and third party artifacts into Central. Stay tuned for more exciting announcements on this topic.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/03/why-external-repos-are-being-phased-out-of-central/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Now Available: m2eclipse 0.10.0</title>
		<link>http://www.sonatype.com/people/2010/02/now-available-m2eclipse-0-10-0/</link>
		<comments>http://www.sonatype.com/people/2010/02/now-available-m2eclipse-0-10-0/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 09:00:06 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[m2eclipse]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=4347</guid>
		<description><![CDATA[
		
		
		
		This is the first production release of m2eclipse in more than a year, and it couldn’t come any sooner.  In this release, you’ll find that we’ve separated the update sites. There is now a core update site and an extras update site which contains optional components.  For more details about the installation, please read the [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/02/now-available-m2eclipse-0-10-0/";
		var dzone_title = "Now Available: m2eclipse 0.10.0";
		var dzone_style = "1";
		var dzone_blurb = "This is the first production release of m2eclipse in more than a year, and it couldn’t come any sooner.  In this release, you’ll find that we’ve separated the update sites. There is now a core update site and an extras update site which contains...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><a href="http://m2eclipse.sonatype.org/installing-m2eclipse.html"><img class="alignright size-full wp-image-4348" title="install-m2eclipse-button" src="http://www.sonatype.com/people/wp-content/uploads/2010/02/install-m2eclipse-button.png" alt="" width="172" height="64" /></a>This is the first production release of m2eclipse in more than a year, and it couldn’t come any sooner.  In this release, you’ll find that we’ve separated the update sites. There is now a core update site and an extras update site which contains optional components.  For more details about the installation, please read the <a href="http://m2eclipse.sonatype.org/installing-m2eclipse.html">installation instructions</a> on the <a href="http://m2eclipse.sonatype.org">m2eclipse site</a>.</p>

<p><strong>One important note about the 0.10.0 release: you cannot upgrade from 0.9.8 or 0.9.9-dev. You must either uninstall the previous version from your Eclipse installation, or you should start with a new installation of Eclipse</strong>.  The recommended version of Eclipse for this release is 3.5.1.  You can download this eclipse distribution from <a href="http://www.eclipse.org/downloads">http://www.eclipse.org/downloads</a>.    The rest of this post details what is new and noteworthy about the m2eclipse 0.10.0 release.<span id="more-4347"></span></p>

<h3>What’s New and Noteworthy in this release?</h3>

<ul>
    <li><strong>Stability</strong> &#8211; We’ve spent the last year working on stability and performance. If you are used to using m2eclipse 0.9.8, you’ll notice a remarkable performance improvement between these two versions.</li>
</ul>

<ul>
    <li><strong>Integrated with Maven 3.0</strong> &#8211; This release of m2eclipse includes Maven 3.0-alpha-6+. One of the primary drivers of the Maven 3.0 effort was to reimplement some of the &#8220;guts&#8221; of Maven to make it easier to embed within frameworks like the Eclipse IDE. If you are wondering what changes need to be made to your projects to use Maven 3.0, the answer is &#8220;none&#8221;. Maven 3.0 is a revolutionary upgrade that will enable the next generation of development tools, but you don’t have change a thing in your project. It should all just work.
<ul>
    <li>Compatibility with Maven 3.0 CLI behaviour</li>
    <li>Major performance improvements compared to 0.9.8</li>
    <li>Full support for proxy/mirror/auth configuration as per settings.xml</li>
    <li><strong>Note for Maven 2 Users:</strong> If you need to configure m2eclipse to use a Maven 2 installation, you can do so in the m2eclipse preferences.</li>
</ul>
</li>
</ul>

<ul>
    <li><strong>Maven Project Lifecycle Mapping framework</strong> &#8211; This framework gives you the ability to customize the Maven plugins and plugin goals which are involved in your development cycle. If you need to configure the Maven Resources plugin to update resources every time your project is built within Eclipse, there is a new tab available in the m2eclipse POM Editor.
<ul>
    <li>Developed using the new Project Configurator API</li>
    <li>Eclipse project configuration and build can be fully customized for project types and individual projects</li>
    <li>Implementation of plexus-build-api to allow mojos participate in eclipse incremental/full builds</li>
    <li>Support for modello, plexus metadata, antlr3, build-helper, resources (from site-extras)</li>
</ul>
</li>
</ul>

<ul>
    <li><strong>Reimplemented nexus-indexer integration and repositories view</strong> &#8211; m2eclipse is very tightly integrated with the Nexus indexer, and it uses it to quickly locate dependencies and artifacts. This release adds a new Repositories View which gives you the ability to inspect, modify, and manage the Maven repositories (including your Local Maven Repository) in an easy-to-use interface.
<ul>
    <li>m2eclipse now tracks repositories defined in settings.xml and project pom.xml files</li>
    <li>New option for disabled, min, or full index details for each Repository</li>
    <li>Supports the new Incremental Index Standard</li>
    <li>Remote index files are cached in maven local repository and shared between workspaces, as a result workspace initialization in m2eclipse is much faster.</li>
</ul>
</li>
</ul>

<ul>
    <li><strong>Preliminary eclipse 3.6 support</strong> &#8211; While we don’t yet recommend the use of Eclipse 3.6, this release does start to add preliminary support for the platform.</li>
</ul>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/02/now-available-m2eclipse-0-10-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three Approaches to User Management in Nexus</title>
		<link>http://www.sonatype.com/people/2010/01/three-approaches-to-user-management-in-nexus/</link>
		<comments>http://www.sonatype.com/people/2010/01/three-approaches-to-user-management-in-nexus/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 19:30:57 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=3866</guid>
		<description><![CDATA[
		
		
		
		When we first set out to design the external security realm (LDAP/ Crowd, etc) support in Nexus Core, we had one primary concern and that was to make it easy to integrate with systems having huge numbers of users.   Nexus was designed as a tool to be used to support the largest open source communities [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/01/three-approaches-to-user-management-in-nexus/";
		var dzone_title = "Three Approaches to User Management in Nexus";
		var dzone_style = "1";
		var dzone_blurb = "When we first set out to design the external security realm (LDAP/ Crowd, etc) support in Nexus Core, we had one primary concern and that was to make it easy to integrate with systems having huge numbers of users.   Nexus was designed as a tool to be...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><!--reddZ=none--><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>When we first set out to design the external security realm (LDAP/ Crowd, etc) support in <a href="http://nexus.sonatype.org">Nexus Core</a>, we had one primary concern and that was to make it easy to integrate with systems having huge numbers of users.   Nexus was designed as a tool to be used to support the largest open source communities with thousands of developers and hundreds of projects, and like most large enterprises, these communities have settled on solutions like LDAP, Active Directory, and Crowd as a way to manage user credentials and permissions.  A secondary concern was to support any level of integration with these external security realms, specifically:</p>

<ul>
    <li>delegating only authentication to an external server</li>
    <li>delegating both authentication and authorization to an external server</li>
    <li>delegating everything but authentication promotion permissions to an external server</li>
</ul>

<p>These interactions were gleaned from years of experience working with customers at all levels. Some have completely centralized control over passwords and roles. Others have a situation where there&#8217;s a global repository but the roles don&#8217;t match reality, or are too hard to get updated.    We wanted to create a system that would both integrate with centralized authentication servers and allow for a sensible way to override role assignments directly in Nexus.<span id="more-3866"></span></p>

<p>All of this is Core functionality works the same with all types of security realms.   We offer <a href="http://www.sonatype.com/books/nexus-book/reference/ldap.html">LDAP</a> and <a href="http://www.sonatype.com/books/nexus-book/reference/crowd.html">Crowd</a> support and the rest of this post will discuss the generic security model that works with every security realm that is available.  It is possible to define multiple external realms for Authentication and/or Authorization in the Server settings. This ordered list is used to validate credentials and select roles.  When a user attempts to authenticate in Nexus, it will iterate over the list until it can successfully authenticate a user.</p>

<h3><strong>Order Realms</strong></h3>

<p>For performance reasons it is almost always beneficial to move any external realms to the bottom of the list. Nexus will not check other realms once it finds a user. The first two realms are fast because the model is held in memory. The external realms tend to be slower, as they need to connect to a remote system.</p>

<p>Navigate to the &#8216;Server&#8217; pane, scroll down to &#8216;Security Settings&#8217; section, and move your external realms to the bottom of the list. (do not forget to save!)</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/realm-order.png"><img class="aligncenter size-full wp-image-3870" title="realm-order" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/realm-order.png" alt="" width="528" height="220" /></a></p>

<p>Now that we&#8217;ve defined the ordering, lets take the full integration approach.</p>

<h3><strong>Authentication and Authorization</strong></h3>

<p>Lots of organizations have some central user management service which has the users identity, credentials, and which groups they belong to.  Nexus is able to delegate login and authentication to that server.  For authorization we map Nexus roles to your organization&#8217;s roles/groups.   If all your users are in a group named &#8216;users&#8217;, you can map this group to a Nexus role of the same name and assign it the desired permissions.   Once a user authenticates against an external realm, their groups will match up against Nexus roles that define the specific permissions to grant.</p>

<p>To map a role, navigate to the &#8216;Roles&#8217; pane and select the &#8216;Add External Role Mapping&#8217;:</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/5-external_role1.png"><img class="aligncenter size-full wp-image-3874" title="5-external_role" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/5-external_role1.png" alt="" width="316" height="142" /></a></p>

<p>A dialog will pop up, you will need to select the security realm you are using and the group you want to be mapped.  This group is a group that is managed by the external server.   In this case, we&#8217;re mapping the &#8220;users&#8221; group in LDAP to a role in Nexus.
<a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/Mapexternal-role.png"><img class="aligncenter size-full wp-image-3871" title="Map=external-role" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/Mapexternal-role.png" alt="" width="674" height="343" /></a></p>

<p>You then need to select which Nexus roles you want to map to your organization&#8217;s group.   Here you see the new role mapping.   To add Nexus permissions for this group, just drag Nexus roles and privileges from the Available Roles / Privileges list to the Selected Roles / Privileges list.<a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/new-role-mapping.png"><img class="aligncenter size-full wp-image-3872" title="new-role-mapping" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/new-role-mapping.png" alt="" width="578" height="379" /></a></p>

<p>By mapping the external roles/groups to Nexus Roles, we are able to grant permissions to &#8220;unnamed&#8221; users. That is, ANY user that successfully authenticates against the external realm, having the group &#8220;users&#8221; will inherit the permissions granted to the Nexus &#8220;users&#8221; role. You do not need to tell Nexus about all these users ahead of time simply to assign them roles. Imagine trying to do that for 6000 users. Nexus is unique among Repository Managers with this approach.</p>

<h3><strong>Authentication only</strong></h3>

<p>Some organizations have central user management but do not maintain user groups, or the groups are unrelated to development. For this use case, Nexus can be configured to delegate the login to the server, but all the user roles are configured inside of Nexus. This provides the benefit of allowing users to use their company wide accounts while letting a Nexus administrator manage roles.</p>

<p>Go to the &#8216;Users&#8217; pane, select a user and give them a role. In the image below, I added &#8216;Nexus Developer Role&#8217; to the user &#8216;Maven&#8217;.
<a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/user-auth-only.png"><img class="aligncenter size-full wp-image-3873" title="user-auth-only" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/user-auth-only.png" alt="" width="654" height="501" /></a></p>

<p>Unlike the first example, you need to manually go to each user that needs access and grant them the appropriate Nexus roles.   In this model, the Nexus administrators take on more responsibility for granting the appropriate users the appropriate level of access to the repositories they need to use.</p>

<h3><strong>Authentication Promotion</strong></h3>

<p>The last option is a combination of the two previous. The User login and list of roles are delegated to a central server, but additional roles are assigned to individual users in the Nexus UI.   In this model, Nexus administrators only need to augment roles for the few users that need to special permissions in Nexus.   For example, user Joe Coder is a developer and is part of the organization&#8217;s basic &#8216;development&#8217; group. If Joe needs helps administer Nexus, all you need to do is assign him the &#8216;Nexus Administrator Role&#8217;.</p>

<p>To assign a user a specific role or privilege, click on User in the Security menu and select the user you want to add a role or privilege to.  You should see the same interface that was shown in the previous section.   While the user will have a set of basic roles mapped from the external security realm, you can add special privileges that allow a user to promote a staged release or administer the Nexus interface.</p>

<p>In this example it is easy to see the power of Nexus&#8217;s security framework. In a few clicks you can give your whole organization access to a Nexus instance. With a few more clicks you can promote a user to and admin, or just give them access to an additional artifacts.</p>

<h3><strong><strong>Summary</strong></strong></h3>

<p>The Nexus Core security support for External realms was designed specifically to manage several different integration scenarios from full external realm delegation to mixing and matching authentication and authorization so that it could work for any type of realm and organization. Wherever possible we made sure to imagine &#8220;will this work with 6000 users?&#8221;, and this is why the role to group mapping is supported and also why we don&#8217;t attempt to list all external users anywhere by default. At the lowest levels we also took care to empower realm authors to integrate in many different ways beyond just roles and permissions. A realm gets access to the exact url and http method (get/put/post/head/delete) and thus can evaluate each request using its own set of rules if desired. This is all part of our strategy to provide the most flexible and robust Repository Manager you can find.</p>

<p>This post focused more on the theory and mechanics of managing external realms in Nexus. If  you would like to see a more end to end solution involving securing subsets of repositories, you can see <a title="Managing OSS Forges with Nexus" href="http://www.sonatype.com/people/2010/01/managing-oss-forges-with-nexus/">Managing OSS Forges with Nexus</a> as most of the topics covered there directly apply to organizations of all sizes.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/01/three-approaches-to-user-management-in-nexus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Managing OSS Forges with Nexus</title>
		<link>http://www.sonatype.com/people/2010/01/managing-oss-forges-with-nexus/</link>
		<comments>http://www.sonatype.com/people/2010/01/managing-oss-forges-with-nexus/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 14:46:05 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=3719</guid>
		<description><![CDATA[
		
		
		
		In addition to managing and maintaining the Maven Central repository, I also serve as the administrator for two very large forge repositories: repository.apache.org and nexus.codehaus.org. This post is going to dive into the details of the best practices that I&#8217;ve developed to maintain these very large instances. I will focus on the configuration of Nexus [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.sonatype.com/people/2010/01/managing-oss-forges-with-nexus/";
		var dzone_title = "Managing OSS Forges with Nexus";
		var dzone_style = "1";
		var dzone_blurb = "In addition to managing and maintaining the Maven Central repository, I also serve as the administrator for two very large forge repositories: repository.apache.org and nexus.codehaus.org. This post is going to dive into the details of the best practices...";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><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="nexus-small" width="250" height="62" />In addition to managing and maintaining the Maven Central repository, I also serve as the administrator for two very large forge repositories: <a href="http://repository.apache.org">repository.apache.org</a> and <a href="http://nexus.codehaus.org">nexus.codehaus.org</a>. This post is going to dive into the details of the best practices that I&#8217;ve developed to maintain these very large instances. I will focus on the configuration of Nexus in this post, but if you&#8217;re interested in system level details, those are documented <a href="https://docs.sonatype.org/display/Repository/Home">here</a>.</p>

<p>Both of these repositories have a few things in common that have driven the design:</p>

<ul>
    <li>there are many disparate projects deploying artifacts that require fine grained access control per project</li>
    <li>release repositories are synced to central</li>
    <li>they are the most commonly used snapshot repositories in the maven ecosystem</li>
    <li>the majority of users are anonymously reading the snapshots</li>
    <li>they are transitional repositories that replace older static repositories</li>
</ul>

<p>They also have a few things that are very different:</p>

<ul>
    <li>Apache is a Solaris Zone</li>
    <li>Codehaus is an Ubuntu Jeos VM</li>
    <li>Apache is using httpd for reverse-proxying and ssl</li>
    <li>Codehaus is using Nginx for reverse-proxying and ssl</li>
</ul>

<p>This post contains two sections, the first covers some system-wide Nexus configuration, the second contains details about adding individual projects, along with security and staging configuration. If you are setting up a public Maven repository, this post might give you some ideas about configuration and administration issues that you&#8217;ll need to think about.
<span id="more-3719"></span></p>

<h3>Nexus System Configuration</h3>

<p>We want to protect all authenticated traffic, so both systems rewrite all http access to https (you can see how that&#8217;s done in the server setup linked above). However, since 99% of all traffic to these systems is anonymous, I&#8217;ve allowed the snapshot urls to poke through without being redirected.</p>

<p>Since I am using reverse proxies in front of Nexus, and the protocol doesn&#8217;t have a good way to tell Nexus what the inbound protocol was, I need to tell Nexus how to generate absolute urls that are used in the REST API. This is done by setting the following options in the server configuration pane:</p>

<p><img class="aligncenter size-full wp-image-3720" title="0-baseurl" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/0-baseurl.png" alt="0-baseurl" width="540" height="107" /></p>

<p>The systems are configured with just two hosted repositories: releases and snapshots. Both systems are transitional, meaning that projects elect to convert at a convenient time. To support this, I proxy the old snapshot repository and aggregate it with the locally hosted snapshot repo. When you hit <a href="http://repository.apache.org/snapshots">http://repository.apache.org/snapshots</a> or <a href="http://nexus.codehaus.org/snapshots">http://nexus.codehaus.org/snapshots</a>, you&#8217;re hitting this group and it appears as one repository. We also have a staging group that is used to aggregate all staging repos that haven&#8217;t yet been promoted. Here&#8217;s what the repository list looks like:</p>

<p><img class="aligncenter size-full wp-image-3721" title="0-repositories" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/0-repositories.png" alt="0-repositories" width="615" />
One benefit to using Nexus in these forge setups, is that we are able to configure rules that automatically check staged artifacts before they can be promoted. This includes things like validating the pgp signature is present and signed with a publicly accessible key, looking for sources and javadocs, validating the pom, etc. This is one way we are helping to improve the data in Central, by helping to correct it right at the source. Since these <a href="http://www.sonatype.com/books/nexus-book/reference/ch10s06.html">rules are tied in to the Staging support</a>, we want to disable the ability to deploy directly to the releases repository. This is done by setting the repository url to be read-only:</p>

<p><img class="aligncenter size-full wp-image-3722" title="0-disable-redeploy" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/0-disable-redeploy.png" alt="0-disable-redeploy" width="658" height="466" />
I also have configured the following jobs:</p>

<ul>
    <li><strong> Configuration Backup</strong> &#8211; Backs up the Nexus Configuration files. I have it set to run daily and to keep 10 days of backups</li>
    <li><strong>Publish Indexes</strong> &#8211; This packages the internal real-time indexes into a format that is consumable by downstream Nexus&#8217; and M2eclipse users (other tools consume this data as well). I have this set to run daily.</li>
    <li><strong> Purge Proxy Artifacts</strong> &#8211; Since we&#8217;re transitional and proxying the old, static snapshot repositories, I have configured a task to evict items that haven&#8217;t been requested in more than 10 days. This just reduces the disk consumption on the repo. If a file is re-requested later, it will be retrieved again from the proxy on demand.</li>
    <li><strong>Snapshot Cleanup</strong> &#8211; We want to enforce best practices and keep snapshots moving forward. The cleanup task is set to keep a maximum of 3 timestamped snapshots for each artifact for a minimum of 10 days. All snapshots for an artifact are also purged when a release is promoted.</li>
    <li><strong>Empty the trash</strong> &#8211; All delete operations in Nexus never actually delete, they just move files to a trash folder. This is a security net in case you misconfigure a cleanup task, or simply make a mistake in the ui (like dropping a repo you meant to promote). We keep on top of the trash by scheduling it to run once a week. New in 1.4 is the ability to purge things from the trash only after they have been deleted for x days. I&#8217;ve set this to hold things in the trash at least 7 days. This gives projects more than enough time to detect any issues and recover the artifacts.</li>
</ul>

<p><img class="aligncenter size-full wp-image-3723" title="10-trash" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/10-trash.png" alt="10-trash" width="591" height="357" /></p>

<h3>Project Specific Configuration</h3>

<p>Each project needs to have access to only their own artifacts. Nexus supports two different ways to handle the security separation. If you want to read more about the two modes read my previous post:<a href="http://www.sonatype.com/people/2009/06/optimal-nexus-repository-configuration/">&#8220;Optimal Nexus Repository Configuration&#8221;</a> .  We have chosen to manage the forge by partitioning a single pair of repositories. The next few steps show how this is done.</p>

<p>First, we define a new Repository Target for this project&#8217;s artifacts. Don&#8217;t worry if you&#8217;re not a regexp genius, wildcards are very easy, and we let you define multiple regexps so you don&#8217;t have to figure out more complicated and/or expressions. In the image below, I&#8217;ve created a new target called &#8220;org.codehaus.org&#8221; that will contain all artifacts in the paths /org/codehaus/mojo and below.</p>

<p><img class="aligncenter size-full wp-image-3724" title="1-repotarget" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/1-repotarget.png" alt="1-repotarget" width="650" /></p>

<p>Now that we&#8217;ve defined our &#8220;bucket&#8221; of artifacts, we need to create some permissions that are associated with it. You&#8217;re probably thinking &#8220;create permissions?&#8221; Yes, see the Repository Target is a generic concept that lets you arbitrarily group artifacts, but notice we haven&#8217;t yet associated the target with any repositories.</p>

<p style="padding-left: 30px;"><em><strong>NOTE:</strong></em><em> The logic behind this approach is that you may want to grant people read access to all org.foo artifacts, but what if you only want them to see artifacts that have been promoted and not things that are still being staged?</em></p>

<p>In this case, we want to grant CRUD (Create / Read / Update / Deleate) to SNAPSHOT artifacts, but only CRU to releases. (Admins only are allowed to delete releases, this prevents problems once things are synced to Central). I will do this in two steps as shown below. First create a set of permissions that link the org.codehaus.mojo Repository Target to &#8220;All Repositories&#8221;:</p>

<p><img class="aligncenter size-full wp-image-3732" title="2-allpriv" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/2-allpriv.png" alt="2-allpriv" width="474" height="195" /></p>

<p>Then create a set or permissions that only apply to the hosted Snapshot repository:</p>

<p><img class="aligncenter size-full wp-image-3731" title="3-snapshotpriv" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/3-snapshotpriv.png" alt="3-snapshotpriv" width="476" height="167" /></p>

<p>Both the Apache and Codehaus forges use the <a href="http://www.sonatype.com/products/nexus/features/staging_suite">Staging support</a> in conjunction with Staging rules to validate the integrity of releases.</p>

<blockquote><strong>NOTE:</strong> Nexus staging is unique in that it&#8217;s entirely controlled from the server side, which means Admins can adjust as needed without changing the poms. It&#8217;s also designed so that all projects use a single url for deployment that is abstracted from the repository, which provides two benefits: 1) you can change the repository hosting artifacts without changing poms and 2) you can specify the distributionManagement url in just one place, reducing the errors. For example, at Apache we have a parent pom that contains all the logic a project needs to be staged.</blockquote>

<p>We control this in Nexus by creating a Staging Profile. Fortunately the profile reuses the Repository Target we defined earlier:</p>

<p><img class="aligncenter size-full wp-image-3730" title="4-staging-profile" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/4-staging-profile.png" alt="4-staging-profile" width="546" height="307" /></p>

<p>Not shown are the settings that let you set the validation rules and who should be notified at each promotion step.  Now that we have defined the staging profile, the system automatically created a few new permissions that let you specify who is allowed to stage, drop and promote these artifacts. We want to grant this permissions to users and this is done via roles.</p>

<p>The Codehaus repository is linked to their LDAP system. Nexus takes a unique approach that lets you easily grant access to dozens of users without having to configure each user in the system. We do this by allowing you to &#8220;map an external role&#8221; and then grant Nexus specific permissions to any user that has this role.  To do this, navigate to the Role pane and select the Add External Role Mapping as shown below:</p>

<p><img class="aligncenter size-full wp-image-3729" title="5-external_role" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/5-external_role.png" alt="5-external_role" width="316" height="142" /></p>

<p>This brings up a dialog where you can select the external realm (you could have multiple realms), and then you will see a list of all the roles known to the external system. Here I&#8217;m selecting &#8220;mojo-developers&#8221;.</p>

<p><img class="aligncenter size-full wp-image-3728" title="6-role-mapping" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/6-role-mapping.png" alt="6-role-mapping" width="429" height="284" /></p>

<p>This creates a new role in Nexus with an id matching the external system id &#8220;mojo-developers&#8221;. Any user authenticated that has this role in the external user account will automatically be granted these permissions.</p>

<p><img class="aligncenter size-full wp-image-3727" title="mojo_-_role-config" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/mojo_-_role-config.png" alt="mojo_-_role-config" width="650" /></p>

<p>I now select the roles and permissions I want to grant. Specifically, I grant the following:</p>

<ul>
    <li><strong>Staging: Deployer (org.codehaus.mojo) </strong>- This is a role that was created when I setup the profile. It contains the basic set of permissions needed to allow a user to view, stage, close and drop org.codehaus.mojo staging repositories (only)</li>
    <li><strong>UI: Staging Repositories</strong> &#8211; This lets the user actually see the staging view, without this they couldn&#8217;t see what they staged.</li>
    <li><strong>org.codehaus.mojo &#8211; All</strong> &#8211; Here I&#8217;m granting Create, Read and Update for all matching artifacts (remember these are the permissions we created above that apply to all repositories)</li>
    <li><strong>org.codehaus.mojo &#8211; snapshots</strong>: Here I&#8217;m granting delete, but only for the org/codehaus/mojo artifacts in the Snapshot repository.</li>
    <li><strong>Staging: Profile org.codehaus.mojo &#8211; (promote)</strong>: The Staging: Deployer xxx roles give the ability to stage, but not the ability to promote. This permission may be granted to managers, qa, or PMC etc as appropriate. Here we&#8217;re letting developers stage and promote their own artifacts.</li>
</ul>

<p>And we&#8217;re done. Notice that I didn&#8217;t need to go grant permissions to every user, and I didn&#8217;t have to put the users into groups. This is the power that Nexus provides in user management. This is <em>core</em> functionality that applies to any realm you may have, not just Nexus Professional ones.</p>

<p>Now, to illustrate some more power of this approach, what if org.codehaus.mojo later starts managing artifacts under org.mojo? I don&#8217;t have to redo everything here, I just extend the Repository Target &#8220;bucket&#8221; by adding &#8220;.<em>/org/mojo/.</em>&#8221; and instantly all the permissions, staging profiles, etc apply to the new groupId. This has definitely saved me many times at Apache with the Webservices Projects&#8230; they have more groupIds than I can count, but they all map back to the same external role. Each time a new one comes along, I just add it to the target and I&#8217;m done.</p>

<h3>Automating Nexus Administration via REST</h3>

<p>This is the process we&#8217;ve ironed out over several months. I definitely don&#8217;t go through this UI clicking every time. Since Nexus has a full REST API (the UI is just a REST client built in JavaScript), we have developed a set of command line tools that take a few simple inputs like groupId, external role id and project name and automates all of this configuration via REST calls automatically. You can see those tools <a href="https://docs.sonatype.com/display/NX/Nexus+Command+Line+Tools#NexusCommandLineTools-NexusPreparationTool">here</a> and they make a great example of how to integrate Nexus into the DNA of your organization.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.sonatype.com/people/2010/01/managing-oss-forges-with-nexus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
