<?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; repository</title>
	<atom:link href="http://blog.sonatype.com/people/tag/repository/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sonatype.com/people</link>
	<description>Sonatype is transforming software development with tools, information and services that enable organizations to build better software, faster, using open-source components.</description>
	<lastBuildDate>Thu, 16 May 2013 18:53:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Releases Are Forever?</title>
		<link>http://blog.sonatype.com/people/2012/01/releases-are-forever/</link>
		<comments>http://blog.sonatype.com/people/2012/01/releases-are-forever/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 23:14:50 +0000</pubDate>
		<dc:creator>Tim O'Brien</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[repository management]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=9838</guid>
		<description><![CDATA[Releases are forever, right? Once you&#8217;ve pushed an artifact to a hosted release repository it is etched in stone, and changing it is a bad practice. That&#8217;s what we&#8217;ve been saying since we launched Nexus, but there are situations that call for old releases to be deleted. In fact, there are situations that require the [...]]]></description>
				<content:encoded><![CDATA[<p>Releases are forever, right?   Once you&#8217;ve pushed an artifact to a hosted release repository it is etched in stone, and changing it is a bad practice.   That&#8217;s what we&#8217;ve been saying since we launched Nexus, but there are situations that call for old releases to be deleted.     In fact, there are situations that require the deletion of old releases?   Otherwise, you&#8217;d be paying for terabytes of useless data storage.  <span id="more-9838"></span></p>

<h2>Sometimes Releases are Disposable</h2>

<p>For example, consider a company that creates a large web-based system.   They may deploy new versions of components to production multiple times a day.   If this seems unrealistic, know that system administrators for popular services like Facebook, Last.fm, and Flickr have talked openly about how frequently code is pushed to production systems.   A few times a day isn&#8217;t odd in some of these environments, and with a large system, you&#8217;d consume terabytes of space to keep all of those old releases around.</p>

<p>Last time I worked at a large consumer-focused web site, pushing something to production once a day wasn&#8217;t uncommon, and even the idea of rolling back to anything other than yesterday&#8217;s build was laughably impractical.   If you identified a bug in a CMS or a production database, you&#8217;d just craft the fix it and move on.    This is especially true of larger, web-facing systems in which the only reality is the code that is running in production today. A site like Flickr gains nothing from being able to roll back to a release from last September.</p>

<h2>The Other Side of the Coin: Releases are Forever</h2>

<p>Compare this to the production release schedule of a critical, supported product and it&#8217;s like night and day.    If you are coding some serious banking system you might be lucky to have a release once a month.  In all likelihood you might be looking at a quarterly release.  When you are working on critical applications, ship software, or have infrequent release cycles then the ability to roll back to previously released binaries is very important.     When you work somewhere fast-paced with a very short release cycle, there&#8217;s not much value in retaining older releases.</p>

<p>For this reason, we&#8217;re clarifying this point: if it makes sense for you to delete release artifacts from a hosted repository, go for it.   Just remember to re-index the server once you&#8217;ve manipulated the storage folder.</p>

<p>We put together the following video to share more of our thoughts on this topic.</p>

<p><iframe width="625" height="352" src="http://www.youtube.com/embed/E5uEQm40h5E?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2012/01/releases-are-forever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Publishing Your Artifacts to the Central Repository</title>
		<link>http://blog.sonatype.com/people/2011/10/publishing-your-artifacts-to-the-central-repository/</link>
		<comments>http://blog.sonatype.com/people/2011/10/publishing-your-artifacts-to-the-central-repository/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 08:03:22 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Central]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[central]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=9136</guid>
		<description><![CDATA[Sonatype makes it easy to add your projects to the Central Repository with a free, public hosting service called OSSRH. We first blogged about this back in 2009, but given the growth in the community, we thought some of you may not have seen that post, so we decided to update it. When you publish [...]]]></description>
				<content:encoded><![CDATA[<p>Sonatype makes it easy to add your projects to the Central Repository with a free, public hosting service called OSSRH.  We first blogged about this back in 2009, but given the growth in the community, we thought some of you may not have seen that post, so we decided to update it.
<span id="more-9136"></span>
<HR>
 When you publish your project&#8217;s artifacts to the Central Repository it will be easy for your users to add a dependency and start using it.  However, getting your project into Central can be a pain if its hosted somewhere like Sourceforge which doesn&#8217;t have a setup for synchronizing to the Central Repository. The old process for publishing your artifacts required several manual steps setup and enable an rsync location&#8230; assuming you can find a location to host your files at all.</p>

<p>At Sonatype, we want to make synchronizing and publishing your artifacts to Central easier and to improve the quality of repository metadata for everyone at the same time.  To facilitate this, we offer a dedicated instance of Sonatype Pro for Nexus at <a href="http://oss.sonatype.org">http://oss.sonatype.org</a> specifically to host the artifacts of open source projects.   In this post, I talk about the process of creating a repository for your open source projects and publishing artifacts so that they will be available from the Central Repository.</p>

<p>This service has been available since 2009 and includes many projects such as <a href="http://plexus.codehaus.org/">Plexus</a>, <a href="http://jetty.mortbay.org/jetty/index.html">Jetty</a>, Google Guice, Spring and <a href="http://ehcache.sourceforge.net">Ehcache</a> (Greg <a href="http://gregluck.com/blog/archives/2009/05/new-ehcache-and-sourceforge-maven-repo-on-oss-sonatype-org/">wrote</a> about his experience with migrating to oss.sonatype.org). We have tooling in place to make it easy for us to process a larger set of requests, so we invite everyone to use this resource. As of October, 2011, we have over 1,500 projects using this repository on a daily basis.</p>

<p>To get the process started, go <a href="https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide">here</a>. We&#8217;ll setup a release and snapshot repository for your project, along with the appropriate configuration to allow you to use the staging features for your releases. If you have an existing repository somewhere, we can migrate that for you too. We&#8217;ll even help you <a href="https://docs.sonatype.org/display/Repository/Uploading+3rd-party+Artifacts+to+Maven+Central">add artifacts</a> to Central that you use, but don&#8217;t necessarily own &#8212; assuming of course that it doesn&#8217;t violate the projects license.</p>

<p>The system allows customizable rules to be run during the staging process, which allows us to automatically check things like valid pgp signatures and correct POM parsing. This will ensure that your users have the best experience possible when using your artifacts, and relieve some of the manual validation on your side &#8212; a win for everyone.</p>

<p>On the technical details, this instance gets its network connection via <a href="http://www.contegix.com">Contegix</a>&#8216;s high availability network, the same one running Central, Codehaus.org and Atlassian.com. <a href="http://www.newrelic.com" target="_blank">New Relic</a> has donated monitoring services to help us monitor and tune this instance of Nexus.  Since OSSRH is hosted on the same infrastructure as the Central Repository, we are able to frequently synchronize the repositories.</p>

<p>Next time you need to add a project to the Central Repository, you&#8217;ll know <a href="https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide">how</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2011/10/publishing-your-artifacts-to-the-central-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven Indexer: Sonatype&#039;s Donation to Repository Search</title>
		<link>http://blog.sonatype.com/people/2011/02/maven-indexer-sonatypes-donation-to-repository-search/</link>
		<comments>http://blog.sonatype.com/people/2011/02/maven-indexer-sonatypes-donation-to-repository-search/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 20:42:50 +0000</pubDate>
		<dc:creator>Tim O'Brien</dc:creator>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[central]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=7261</guid>
		<description><![CDATA[We create a search index for the Maven repository so that you don&#8217;t have to. What does this mean for you? It means that you don&#8217;t have to run a &#8220;little Google&#8221; in your datacenter just to search for the latest log4j library, and you also don&#8217;t have to sacrifice Terabytes of bandwidth to download [...]]]></description>
				<content:encoded><![CDATA[<p>We create a search index for the Maven repository so that you don&#8217;t have to.    What does this mean for you?   It means that you don&#8217;t have to run a &#8220;little Google&#8221; in your datacenter just to search for the latest log4j library, and you also don&#8217;t have to sacrifice Terabytes of bandwidth to download thousands of artifacts you&#8217;ll never use to just to find the handful you need for your project.   This is all done for you on Central, and the tools you use to search Central, Nexus and m2eclipse all benefit from this pre-made index file.</p>

<p>While this seems like such a simple idea, the Maven ecosystem hasn&#8217;t had a standard way to search the repository for the majority of its history.   For much of the last decade there was no reliable way to search for an artifact.   In this post, I&#8217;m going to review this history and talk about Maven repository search and where we think search is headed.  With the release of Nexus OSS 1.9 it is now a good time to summarize the results of Sonatype donation of the Nexus Indexer to the Apache Software Foundation.</p>

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

<h3>In the beginning…</h3>

<p>In the beginning there was ibiblio.   That&#8217;s not entirely true.  When Jason van Zyl created the first Maven repository in 2002, there were a number of different servers and mirrors involved, but after a few weeks of migrating between Apache servers, the first incarnation of Central ended up at ibiblio.</p>

<p>If you were depending on the Maven repository back then, you have a good appreciation for how far we&#8217;ve come in just a few years.  Back then, the bandwidth was terrible and the connections were iffy.  It was touch-and-go both in terms of stability but also in terms of process.   You can still see some of the echos of the initial effort today in the form of old group IDs.   If you are wondering why projects like log4j and commons-lang exist as top-level group IDs it is because the initial artifacts didn&#8217;t follow the same strict standards for naming.   In 2002 the repository was emerging, and it would take a few years for people to agree on standards and formats.</p>

<h3>Maven&#8217;s Structure Becomes a Standard</h3>

<p>Within a year, people using the Maven repository had come to rely on it as an essential piece of development infrastructure.     While Java had been around for almost a decade, no one had created a viable repository structure.  There was no way to distribute artifacts between projects, and the Maven repository was created at a critical time in the development of open source Java.  As Java really start to take off in the enterprise, as systems grew more complex, and as an explosion of open source Java libraries hit the scene from places like Apache, the Maven repository quickly became the established way to distribute artifacts. There was no going back.</p>

<h3>Maven Search: The Dark Ages</h3>

<p>Years passed, the format of the repository changed between Maven 1 and Maven 2.  As more and more projects started to use Maven or publish to the Maven repository, there was a need to create some sort of search interface to help developers locate artifacts in the repository.</p>

<p>Initial efforts for repository search were disconnected and relied on multiple, independent systems running proprietary analysis on the entire repository.   (I know this myself because I took at stab at writing one in 2006.)   To search the repository, you had to download the entire repository and run a series of regular jobs to grab changes and update an index.   There was no standard search mechanism that would facilitate tool integration, and most people discovered Maven artifacts either by clicking around in a browser or by word-of-mouth.</p>

<h3>Earlier Repository Managers and Search</h3>

<p>Early repository managers contained independent implementations for search indexing.   Early versions of Archiva had an independent index library based on Lucene, and Artifactory relies on a JCR store.  While it was clear that repositories were going to play a key role in providing an easy way to search for artifacts by metadata and class name, these earlier approaches still required people maintaining repository managers to download the entire repository and run a time consuming, CPU-intensive process just to create  searchable index.  </p>

<p>This is where the Nexus Indexer started to come into play.</p>

<h3>The Nexus Indexer</h3>

<p>When Sonatype created a repository manager, we also aimed to create a standard and sustainable way to search for artifacts.    The Nexus Indexer defines a standard format for repositories, but, most important, it defines a portable format that captures information about a repository.   This format is what your repository manager downloads from a remote repository, and it is the reason why repository managers like Nexus and Archiva can allow you to browse the contents of a remote repository without downloading &#8220;the entire internet&#8221;.</p>

<p>Sonatype&#8217;s open source repository manager, Nexus, was the first repository manager to define a standard format for a repository index.  We didn&#8217;t just define a product with a search feature, we set out to define the standard.   Using this model, servers like Maven Central and other popular open source forge repositories would periodically index repository contents and present clients with an index.   Instead of downloading Terabytes of data from the internet, your Maven client, your IDE, your repository manager could download an optimized index containing all of the metadata about artifacts in the repository.</p>

<p>This innovation also had the effect of offloading the responsibility from your repository manager.   If you want to search the repository, you don&#8217;t have to set aside a few days for your own instance to crawl Terabytes of data.   Maven Central is indexed once, in a central location, and the world saves zillions of CPU cycles because of that fact.</p>

<p>The Nexus Indexer was an immediate success, the index format was created on a weekly schedule on Maven Central.   Sonatype carved out the Nexus Indexer as a separate component, released it under a very conservative, BSD-style license, doing all we could to make sure that everyone interacting with the repository could read this format.   Very quickly all of the repository managers on the market could both read from and write to a Nexus Index.  For example, Archiva now relies on the NexusIndexer, and will likely move to the Maven Indexer.</p>

<h3>Donating Nexus Indexer to the Maven Project</h3>

<p>As this index format became more widespread through the Maven ecosystem and more generalized for other languages and systems.   Sonatype thought it made perfect sense to remove any direct association with Nexus.   It was becoming a part of the foundational infrastructure for the community, and, in a decision that might make some executive&#8217;s heads spin with disbelief, we donated it to the Maven community.  We gave it away.</p>

<p>For something this low-level, this important to the community, it didn&#8217;t make any sense for Sonatype to hold on to this resource.      The Nexus Indexer is now called the Maven Indexer and the code behind this index is now a part of the Apache Maven project.</p>

<p>At Sonatype, we understand the role we play in supporting the universal infrastructure that enables the world to develop and collaborate.  We also understand how important it is to ensure that something as important as the index format be truly open: managed by an active and healthy community, free of difficult licensing questions, and unencumbered by patent concerns.</p>

<h3>Next Up: Nexus OSS 1.9, Now with the Maven Index</h3>

<p>To complete the circle of our successful transition of the Nexus Indexer to the Apache Maven project, we&#8217;re announcing that the next version of Nexus is one of the first projects to incorporate the newly minted Maven Indexer.  Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2011/02/maven-indexer-sonatypes-donation-to-repository-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New official Maven Central repository in Europe</title>
		<link>http://blog.sonatype.com/people/2010/10/new-official-maven-central-repository-in-europe/</link>
		<comments>http://blog.sonatype.com/people/2010/10/new-official-maven-central-repository-in-europe/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 16:23:04 +0000</pubDate>
		<dc:creator>Brian Fox</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[central]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=6345</guid>
		<description><![CDATA[Maven Central has become an increasingly important resource for the development community at large. We&#8217;ve put several efforts forward earlier this year to help improve the content quality and to reduce the time required to get artifacts into the repository. These have matured over time and are now automatically validating artifacts. These processes are documented [...]]]></description>
				<content:encoded><![CDATA[<p>Maven Central has become an increasingly important   resource for the development community at large. We&#8217;ve put several   efforts forward earlier this year to help improve the content quality   and to reduce the time required to get artifacts into the repository.   These have matured over time and are now automatically validating   artifacts. These processes are documented for <a href="https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide">Maven Projects</a> and <a href="https://docs.sonatype.org/display/Repository/Uploading+3rd-party+Artifacts+to+Maven+Central">3rd Party Artifacts</a>.</p>

<p>To improve the experience for users in Europe, Sonatype has  provisioned a new official repository in the United Kingdom. This is  more than a mere mirror of Central, this system is updated in lockstep  with the systems here in the US, and is managed and monitored 24&#215;7 by  Contegix, the same team watching over the US repositories. The new  repository consists of two fully redundant systems running in parallel  to provide complete fail-over capacity.</p>

<p>In addition to the new repository, we have taken several steps to improve and further secure Central itself:</p>

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

<ul>
    <li> A new system has replaced Central as the inbound processing  engine. On this staging system, we can now vet inbound artifacts for  quality and other parameters before publishing them to repo1 and Europe.  It also serves as a hot standby for the US repository.</li>
    <li> We&#8217;ve worked with Contegix to implement additional layered security around the repository machines themselves.</li>
    <li> There is a new Jira <a href="https://issues.sonatype.org/browse/MVNCENTRAL">project </a>to manage any and all concerns and issues with Central, the Mirrors, Content, etc</li>
    <li>We are working to setup another official Central Repository in Asia soon</li>
</ul>

<p>The new repository is live at http://uk.maven.org/maven2/ if you&#8217;re using a repository manager, just replace references to http://repo1.maven.org/maven2 with the new url. If you&#8217;re not, you should be (Whitepapers: <a href="http://www.sonatype.com/Intro-RepoManagement.pdf">Intro to Repository Management</a> / <a href="http://www.sonatype.com/Repo-StagesOfAdoption.pdf">Stages of Repository Adoption</a>), but until you get  a repository manager in place, add the following to your settings.xml:</p>

<blockquote>&lt;mirrors&gt;
&lt;mirror&gt;
&lt;id&gt;uk&lt;/id&gt;
&lt;mirrorOf&gt;central&lt;/mirrorOf&gt;
&lt;url&gt;http://uk.maven.org/maven2/&lt;/url&gt;
&lt;/mirror&gt;
&lt;/mirrors&gt;</blockquote>

<p>Some additional coverage on this topic can be seen at <a href="http://www.infoworld.com/d/cloud-computing/sonatype-enhancing-cloud-based-software-repository-110">InfoWorld</a>, <a href="http://www.businesswire.com/news/home/20101019006309/en/Sonatype-Announces-Significant-Enhancements-Maven-Central-Industry%E2%80%99s">BusinessWire</a> and <a href="http://www.infoq.com/news/2010/10/maven-central-uk">InfoQ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/10/new-official-maven-central-repository-in-europe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benefits of a Repository Manager: Part III Continuous Build Deployment</title>
		<link>http://blog.sonatype.com/people/2010/08/benefits-of-a-repository-manager-part-iii-continuous-build-deployment/</link>
		<comments>http://blog.sonatype.com/people/2010/08/benefits-of-a-repository-manager-part-iii-continuous-build-deployment/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 13:46:30 +0000</pubDate>
		<dc:creator>Tim O'Brien</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[builds]]></category>
		<category><![CDATA[continuous]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5914</guid>
		<description><![CDATA[In the previous post in this series I discussed three compelling ways in which a repository manager can benefit the development cycle. It proxies artifacts locally, it is optimized to store binary artifacts, and it facilitates a new level of collaboration and agility that isn&#8217;t possible when your SCM is only way for workgroups to [...]]]></description>
				<content:encoded><![CDATA[<p>In the previous post in this series I discussed three compelling ways in which a repository manager can benefit the development cycle.   It proxies artifacts locally, it is optimized to store binary artifacts, and it facilitates a new level of collaboration and agility that isn&#8217;t possible when your SCM is only way for workgroups to collaborate.   In this post, I&#8217;m going to talk about how a repository manager works in concert with a continuous integration server like Hudson or Bamboo.</p>

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

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/08/ci-builds.png"><img class="aligncenter size-full wp-image-5915" title="ci-builds" src="http://www.sonatype.com/people/wp-content/uploads/2010/08/ci-builds.png" alt="" width="337" height="147" /></a></p>

<p>First, the how, what, and when of a continuous integration server.  Continuous integration (CI) servers are an established fact of of modern development infrastructure.   It is a server which, for the most part, waits and watches.   It keeps a vigilant eye on your source control system and jumps into action every time it sees a code change.    When code changes, your CI system is usually configured to run the entire build, execute all of your unit and integration tests, and send out an email to every developer if it identifies a defect or a failed test.</p>

<p>It does this so that you will have an easier time identifying where a particular problem was introduced to the source code.   If John checks in some bad code, the CI system runs the build immediately, and about 30 minutes later, everyone in the group receives an email with the subject header &#8220;John just broke the build&#8221;.   It is a great way to identify errors, and it is also a great way to motivate developers to test locally before committing to a source control system as no one likes to be the reason for a build failure email.</p>

<p>Running a CI server is more than &#8220;just a good idea&#8221;.  Once your system reaches a certain level of complexity you can&#8217;t scale a system without commiting to continuous integration and testing.   If you don&#8217;t have continuous integration, you end up having to put all development on hold each time you want to perform a release.   If you don&#8217;t build, test, and deploy your system on a regular basis &#8211; if it isn&#8217;t something that is well rehearsed, integration becomes a time consuming nightmare of manual testing and builds that often leads to inconsistent builds.   This is especially true if your development effort spans multiple systems and multiple development workgroups.   You run a CI system because building, testing, and deploying your system should be automatic: it should be as trivial as pressing a button.</p>

<p>The concept of a CI server is only slightly more established than a repository manager, and very often you will see that an organization has identified the need for a CI server before they&#8217;ve identified the need for a repository manager.   If you are coding a complex system, there is a very good chance that you are already running a CI server.  The most popular servers out there are Hudson, Bamboo, and CruiseControl.   While the connection between CI servers and repository managers might not be immediately obvious, when used together they can introduce some new possibilities for the way you develop your systems.</p>

<h2>Continuous Publishing</h2>

<p>When you have a system to continuously build your code, you also have a system that can continuously publish SNAPSHOT artifacts to a repository manager to enable a more granular approach to development.   What do I mean by &#8220;a more granular approach to development&#8221;?  To answer that question, let&#8217;s take a look at a complex multi-module project using the example of the eCommerce group from the previous post in this series.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/08/ecom-multimod.png"><img class="aligncenter size-full wp-image-5918" title="ecom-multimod" src="http://www.sonatype.com/people/wp-content/uploads/2010/08/ecom-multimod.png" alt="" width="434" height="569" /></a></p>

<p>Assume you have a new programmer starting tomorrow.   Instead of throwing him at the entire forty-thousand lines of code, you would like to be able to give that developer a small, easy to digest task.    You want this developer to add support for PayPal&#8217;s Adaptive Payments API in your eCommerce system.  That&#8217;s it.   You don&#8217;t want them to be distracted by the overwhelming scope of the project, and you certainly can&#8217;t afford for them to take a three month voyage through your project&#8217;s code before they start contributing to the effort.   Deadlines are tight, and you don&#8217;t have enough people on your team.   It is important that new hires start programming as soon as they walk in the door.</p>

<p>Without a repository manager hooked up to a continuous integration server, if you try to checkout just the ecom-paypal project, the build is going to fail because it will try to download dependencies from a repository manager.   In the case of the ecom-paypal project, assume that the dependency graph looks like this.</p>

<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/08/ecom-multimod-dep.png"><img class="aligncenter size-full wp-image-5919" title="ecom-multimod-dep" src="http://www.sonatype.com/people/wp-content/uploads/2010/08/ecom-multimod-dep.png" alt="" width="448" height="191" /></a></p>

<p>When you have a repository manager and a continuous integration server, you can configure your continuous integration server to publish SNAPSHOT artifacts (in-progress SNAPSHOT binaries) to your repository manager.   This will allow you to just check out a single, isolated portion of a much larger multi-module project.</p>

<p>Without a repository manager, trying to build version 1.3-SNAPSHOT of ecom-paypal in isolation is going to generate errors because you are forced to checkout the entire codebase to build and install all of the dependencies in your local repository.   With a repository manager, SNAPSHOT artifacts are being continuously published because Hudson is checking you SCM every few minutes and building the latest code.   When you run the ecom-paypal module&#8217;s build in isolation, Maven is going to download the most recent SNAPSHOT.</p>

<p>Without a repository manager, your new developer is going to have to download the entire codebase and run a large time-consuming build.   With a repository manager you can work on specific components of a larger multi-module project.    This ability to divide and conquer your codebase comes in very handy when you need a consultant to take a look at a specific problem, or when you need to look at a coding problem in isolation.</p>

<p>When you continuously publish build artifacts to a repository manager, you move away from the single monolithic project build and toward a project layout and architecture that lends itself to modularization.</p>

<p>In tomorrow&#8217;s post: How a Repository Manager decouples deployments from source code, and what that means for developer operations.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/08/benefits-of-a-repository-manager-part-iii-continuous-build-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Aether: Embeddable Maven Repository API</title>
		<link>http://blog.sonatype.com/people/2010/08/introducing-aether/</link>
		<comments>http://blog.sonatype.com/people/2010/08/introducing-aether/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 17:43:54 +0000</pubDate>
		<dc:creator>Jason van Zyl</dc:creator>
				<category><![CDATA[Aether]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5952</guid>
		<description><![CDATA[Introducing Aether Aether (pronounced ē&#8217;thər, as in flying though the ether) aims to be the standard library for interacting with Maven repositories. Without question, the most important aspect of the Maven ecosystem is interoperability at the repository level. There are many emerging options in the build space for JVM-based languages, but the one thing they [...]]]></description>
				<content:encoded><![CDATA[<h1>Introducing Aether</h1>

<p>Aether (pronounced ē&#8217;thər, as in flying though the ether) aims to be the standard library for interacting with Maven repositories. Without question, the most important aspect of the Maven ecosystem is interoperability at the repository level. There are many emerging options in the build space for JVM-based languages, but the one thing they all have in common is their interaction with Maven repositories. It&#8217;s clear that Maven repositories play a critical role within JVM-based development infrastructures and Aether will provide the necessary interoperability, through a common set of tools and APIs, that&#8217;s critical for happy users in the ecosystem.</p>

<h2>Aether &amp; Maven 3.x</h2>

<p>Benjamin Bentmann, Sonatype&#8217;s lead on Maven 3.x, has fully integrated Aether back into Maven 3.x. Though Aether is an extraction from Maven, Aether is not Maven specific. That said Maven 3.x and Maven repositories are our first priorities. The upshot is that if you embed Aether, you will be embedding the same library that Maven 3.x uses when it interacts with a Maven repository.  If compatibility with Maven repositories is important for your project then it&#8217;s not going to get any better than Aether.</p>

<h2>Aether &amp; Mercury</h2>

<p>Mercury was our first attempt at extracting a Repository API from Maven and that didn&#8217;t work. We bit off more then we could chew, and so our first attempt was a learning experience. We attempted to integrate the excellent <a href="http://www.sat4j.org/">SAT4J</a> library but didn&#8217;t have enough experience to pull that off. In addition there may be features of SAT4J Maven requires that are not present yet. As such, we felt it better to attempt something less ambitious, yet functional, and invest in research for future improvements.</p>

<h2>Aether, p2 &amp; SAT4J</h2>

<p>As part that investment, we will be collaborating in sponsored research with Daniel Le Berre, who is the author of SAT4J. Daniel is a tenured professor at University of Lens, and researcher at Centre de Recherche en Informatique de Lens and is affiliated with Centre National de la Recherche Scientifique. His work will not only help us with p2, but also with many things we want to accomplish in Maven. We see a lot of overlap in the work Sonatype is doing on Maven and p2 and ultimately we really see there being one artifact resolving framework.</p>

<h2>Aether &amp; Ant</h2>

<p>Rest assured there will be excellent Aether Ant Tasks.  Making sure that Aether works flawlessly inside Maven 3.x is our first priority, but we are committed to making a set of excellent Aether Ant Tasks. If you&#8217;re interested in Aether Ant Tasks you can follow the progress <a href="https://issues.sonatype.org/browse/AETHER-4">here</a>.</p>

<h2>Aether Resources</h2>

<p>If you are interested in Aether here are the goods:</p>

<ul>
<li><a href="http://github.com/sonatype/sonatype-aether">Aether Sources @ Github</a></li>
<li><a href="https://issues.sonatype.org/browse/AETHER">Aether Issue Tracking @ Sonatype</a></li>
<li><a href="https://docs.sonatype.org/display/AETHER">Aether Wiki @ Sonatype</a></li>
<li>Mailing lists:

<ul>
<li><a href="mailto:aether-user@sonatype.org">Aether Users @ sonatype.org</a></li>
<li><a href="mailto:aether-dev@sonatype.org">Aether Developers @ sonatype.org</a></li>
<li><a href="mailto:aether-scm@sonatype.org">Aether SCM @ sonatype.org</a></li>
</ul></li>
</ul>

<p>P.S. Thanks to <a href="https://twitter.com/zepag">Pierre-A Grégoire</a> for the name Aether!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/08/introducing-aether/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google&#039;s GWT 2.0.4 Available on Maven Central (via Nexus OSS)</title>
		<link>http://blog.sonatype.com/people/2010/07/gwt-2-0-4-now-available-in-maven-central/</link>
		<comments>http://blog.sonatype.com/people/2010/07/gwt-2-0-4-now-available-in-maven-central/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 12:47:39 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[central]]></category>
		<category><![CDATA[Central]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=5797</guid>
		<description><![CDATA[Sonatype is happy to announce that Google Web Toolkit 2.0.4 jars are now available in the Maven Central repository.  The Google Web Toolkit blog explains this move in more detail: Better maven support has been frequently requested on the issue tracker and mailing list, and this is a first step in that direction. In the [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sonatype.com/people/wp-content/uploads/2008/12/central-maven1.png"><img class="alignright size-full wp-image-1330" title="central-maven1" src="http://www.sonatype.com/people/wp-content/uploads/2008/12/central-maven1.png" alt="" width="137" height="138" /></a>Sonatype is happy to announce that <a href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a> 2.0.4 jars are now available in the Maven Central repository.  The <a href="http://googlewebtoolkit.blogspot.com/2010/07/gwt-204-now-available-in-maven-central.html" target="_blank">Google Web Toolkit blog</a> explains this move in more detail:</p>

<blockquote>Better maven support has been frequently requested on the issue tracker  and mailing list, and this is a first step in that direction. In the  future, Google will publish GWT releases to maven central as part of the  release process.</blockquote>

<p>The GWT 2.0.4 jars currently in the repository include gwt-user,  gwt-dev, and gwt-servlet.    To publish these artifacts in the Maven Central repository, Google publishes artifacts to Nexus OSS, the Open Source <a href="http://oss.sonatype.org">oss.sonatype.org</a> repository.   You can see the Google-specific repository on this server <a href="https://oss.sonatype.org/index.html#view-repositories;google">here</a>.   Releases are staged to this Google repository on oss.sonatype.org and then subsequently released and synchronized to the Maven Central repository.</p>

<h2><span id="more-5797"></span><span style="font-size: 13.2px;">Configuring the GWT Plugin</span></h2>

<p>To start developing with GWT, take a look at the &#8220;Automatic Mode Setup&#8221; section on the <a href="http://mojo.codehaus.org/gwt-maven-plugin/user-guide/setup.html">GWT Maven plugin&#8217;s Setup instructions</a>.   Before last week, the only way to develop a GWT application with the latest version of GWT was to download the SDK to your workstation and then use systemPath dependencies or a custom task to publish artifacts to your local repository.    Today, you can just point your Maven project&#8217;s pom.xml at the correct version of gwt-servlet and gwt-user and Maven will grab the necessary native libraries from Central.</p>

<p>This doesn&#8217;t just make GWT development easier and more straightforward for people already using the tool, it will make it much easier for developers to start using GWT.   When you publish your project&#8217;s artifacts to the Maven Central repository you make it easier for people to adopt your technology.   Maven Central is the &#8220;dial tone&#8221; for most developers, and if you put it on Central, they can access it without having to download an SDK or configure a build system.   Maven Central just works.</p>

<p>Nexus OSS is the fastest, most efficient way to publish artifacts to Maven Central, and Sonatype has made this service available to any open source project that needs to publish artifacts.   If you work with an open source project or a company which publishes open source libraries, read the <a href="https://docs.sonatype.org/display/repository/sonatype+oss+maven+repository+usage+guide">Sonatype Nexus OSS Repository Guide</a> to get started.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/07/gwt-2-0-4-now-available-in-maven-central/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#039;s New in Nexus Open Source 1.7.0?</title>
		<link>http://blog.sonatype.com/people/2010/06/whats-new-in-nexus-open-source-1-7-0/</link>
		<comments>http://blog.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 Search [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/01/nexus-small.png"><img class="alignright size-full wp-image-3683" title="nexus-small" src="http://www.sonatype.com/people/wp-content/uploads/2010/01/nexus-small.png" alt="" width="250" height="62" /></a>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>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/06/whats-new-in-nexus-open-source-1-7-0/feed/</wfw:commentRss>
		<slash:comments>126</slash:comments>
		</item>
		<item>
		<title>Adding Dependencies Using m2eclipse</title>
		<link>http://blog.sonatype.com/people/2010/03/adding-dependencies-using-m2eclipse/</link>
		<comments>http://blog.sonatype.com/people/2010/03/adding-dependencies-using-m2eclipse/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 15:20:12 +0000</pubDate>
		<dc:creator>hloney</dc:creator>
				<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[Sonatype]]></category>
		<category><![CDATA[dependencies]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=4628</guid>
		<description><![CDATA[This video demonstrates how easy it is to add dependencies using m2eclipse.    Because m2eclipse understands how to interact with a repository index, it can quickly locate a dependency by class name or by GAV coordinate.    Don&#8217;t know which artifact contains a particular class?   Just start writing code and use an Eclipse Quick [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sonatype.com/people/wp-content/uploads/2010/03/m2eclipse.jpg"><img class="alignright size-medium wp-image-4632" title="m2eclipse" src="http://www.sonatype.com/people/wp-content/uploads/2010/03/m2eclipse-300x75.jpg" alt="" width="300" height="75" /></a>This video demonstrates how easy it is to add dependencies using m2eclipse.    Because m2eclipse understands how to interact with a repository index, it can quickly locate a dependency by class name or by GAV coordinate.    Don&#8217;t know which artifact contains a particular class?   Just start writing code and use an Eclipse Quick Fix to search all Maven repositories for an artifact that contains a particular class.    Want to inspect and browse a Maven repository? Don&#8217;t use a web browser.  Use the built-in dependency search feature in m2eclipse.</p>

<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="660" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/H8QdjyCB8Nw&amp;hl=en_US&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6&amp;hd=1&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="660" height="405" src="http://www.youtube.com/v/H8QdjyCB8Nw&amp;hl=en_US&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6&amp;hd=1&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/03/adding-dependencies-using-m2eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nexus: Improving Maven Central and Supporting the Maven Ecosystem</title>
		<link>http://blog.sonatype.com/people/2010/01/nexus-oss-ecosystem/</link>
		<comments>http://blog.sonatype.com/people/2010/01/nexus-oss-ecosystem/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 07:00:29 +0000</pubDate>
		<dc:creator>Jason van Zyl</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[Nexus]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[central]]></category>
		<category><![CDATA[codehaus]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[polyglot]]></category>
		<category><![CDATA[repository]]></category>

		<guid isPermaLink="false">http://www.sonatype.com/people/?p=3834</guid>
		<description><![CDATA[Nexus is more than just a repository manager.  It is a project that has been developed using the same underlying infrastructure of Maven, and it has forced us to think about the different ways in which the components that comprise Maven can be integrated with other, more complex systems.   It is a critical step toward [...]]]></description>
				<content:encoded><![CDATA[<p><!--reddZ=none--> <a rel="nofollow" href="http://nexus.sonatype.org/"></a><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>Nexus is more than just a repository manager.  It is a project that has been developed using the same underlying infrastructure of <a rel="nofollow" href="http://maven.apache.org/">Maven</a>, and it has forced us to think about the different ways in which the components that comprise Maven can be integrated with other, more complex systems.   It is a critical step toward a more mature Maven ecosystem which starts to encompass much more than just software builds.   You can think of Nexus as the second major project to emerge from the Maven ecosystem &#8211; an ecosystem which includes both commercial interests as well as open source volunteers and community participants.</p>

<p>Sonatype is focused on improving the foundational infrastructure which will allow us to improve the quality of artifacts and their accompanying metadata in Maven Central and Maven repositories around the world.  A lot of this is not especially glamorous work and though many people complain about the state of some of the Maven repositories, very few take action.    Here are some of the things Sonatype is doing with Nexus to improve the state of the Maven ecosystem and expand its scope.</p>

<h3><span id="more-3834"></span>Improving the Quality of Public Maven Repositories</h3>

<p>Any effort to improve the quality of the Central Maven repository needs to begin with the major feeder repositories.  For years, we have been giving rsync access to many of the organizations with large feeder repositories like Apache and Codehaus.   When we started this effort, we were optimistic that these organizations would take care of their Maven repositories.   We thought that repository maintainers and projects would make sure that all artifacts were signed and that all POMs contained a bare minimum of useful elements such as &#8220;license&#8221; and &#8220;description&#8221;.    With hundreds of projects pushing artifacts into their respective repositories on a daily basis, it has become obvious that without some mechanism to guarantee quality, without a well-defined process, the Central Maven repository will contain artifacts and metadata of questionable status.  While the vast majority of artifacts have appropriate PGP signatures and metadata, the fact that a minority of (often very popular) artifacts lack proper dependency definitions or license elements means that we see a steady stream of complaints about the quality of the repository from our users.</p>

<p>These problems can be anything from one project trying to publish another project&#8217;s artifacts because they weren&#8217;t in Maven Central, incorrect, bad, or missing metadata, missing javadocs or source JARs, to invalid transitive closures.  Whatever the problems are, the overall issue stems from the lack of process surrounding how artifacts are published to our feeder repositories, and how these artifacts are then certified to be published to the Central Maven repository.</p>

<p>Sonatype&#8217;s answer to this problem has been to provide tools that can automate the process of repository maintenance for Central&#8217;s largest customers &#8211; the main feeder repositories.   We&#8217;ve provided a solution to the largest of the feeder repositories which allows them to use the <a rel="nofollow" href="../../books/nexus-book/reference/staging.html">Nexus Staging Suite</a> to validate that all release artifacts contain the bare minimum of metadata, javadoc, and a valid PGP signature.    As <a rel="nofollow" href="../2010/01/apache-portals-simplifies-releases-with-nexus-staging-suite/">Ate Douma</a> wrote in Monday&#8217;s post about using the Nexus Staging suite to support the Apache Portals project, we&#8217;ve supplied a solution that reduces the amount of error-prone, manual work associated with software releases, and we&#8217;re going to continue to find ways to address the needs of large, open-source enterprises with Nexus by providing Open Source projects and organizations with a free license and free support.   Here is a list of some of the organizations with large feeder repositories that we are supporting directly:</p>

<ul>
    <li>The Apache Software Foundation</li>
    <li>Codehaus</li>
    <li>Alfresco</li>
    <li>ExoPlatform</li>
    <li>Glassfish</li>
    <li>Open QA</li>
    <li>Scala-Tools</li>
</ul>

<p>With all of these organizations and projects using the <a rel="nofollow" href="../../books/nexus-book/reference/staging.html">Nexus Staging Suite</a>, we are confident that the quality and reliability of artifacts and metadata will increase over time.  The PGP signatures provide the security assurances organizations need, and the sources, javadocs and correct POM information like SCM information make for a better developer experience in the IDE.  In <a rel="nofollow" href="http://m2eclipse.sonatype.org/">M2Eclipse</a>, for example, javadocs and sources can be dynamically retrieved as required and binary dependencies can be materialized to source from from SCM coordinates. This makes contributing patches to an dependent project an order of magnitude easier.</p>

<p>We are also fortunate to be working closely with <a rel="nofollow" href="http://www.atlassian.com/">Atlassian</a>. We have <a rel="nofollow" href="../../books/nexus-book/reference/crowd.html">Atlassian Crowd support</a> in Nexus, so Nexus is an ideal fit for Atlassian and for organizations that make use of Atlassian&#8217;s compelling products. You can find Atlassian&#8217;s Nexus instance <a rel="nofollow" href="https://maven.atlassian.com/index.html">here</a>. It&#8217;s just another validation point for us that Atlassian sees fit to use our products as part of their daily development. We have a lot of respect for the Atlassian folks, and we&#8217;ve standardized our entire development environment on tools like <a rel="nofollow" href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAoQFjAA&amp;url=http%3A%2F%2Fwww.atlassian.com%2Fsoftware%2Fjira%2F&amp;ei=PeZMS5jrCILSMojtrf0M&amp;usg=AFQjCNGx2m653qgbdvjNB8XxITgsQAI6eg&amp;sig2=ikymb4spNgpmY-XjYI6_sQ">JIRA</a> , Greenhopper, and Confluence.</p>

<h3>Decreasing the Time to Reach Maven Central</h3>

<p>Many users and projects have complained that it can take a while to get their artifacts in Maven Central so we&#8217;re starting to focus on reducing the time to reach Central. The biggest obstacle to automating the process of publishing artifacts to Central is one of quality.   Artifacts would reach central faster if there was a better way to enforce a minimal set of quality standards.  The legacy process involved projects uploading &#8220;bundles&#8221; to a JIRA project and repository maintainers manually inspecting the bundles to see if they complied with a set of standards.</p>

<p>In the previous section, I described how Nexus is already powering the major feeder repositories for the Central Maven repository.  What we offer projects is described <a rel="nofollow" href="http://nexus.sonatype.org/oss-repository-hosting.html">here</a>. Basically we will help you cleanup, and migrate your project&#8217;s Maven repository to our hosted infrastructure and help you setup your project POMs to use <a rel="nofollow" href="../../books/nexus-book/reference/staging.html">Nexus&#8217; Staging</a>. Projects are setup with the default staging rules which ensure the presence of PGP signatures, javadocs, sources, and a POM which contains decent information. We provide all the instructions for the setup on the Maven side so there is little work you have to do in order to take advantage of this service.  We are also providing a mechanism by which the standard bundle uploads, typically done via JIRA, can be handled by Nexus. Internally within Nexus the upload bundle is exploded and placed in a staging repository, as would happen if you performed the release against Nexus from your Maven build.  We then apply the same staging rules to ensure quality.</p>

<p>We have already started rewarding projects with good Maven releases by automating their synchronization with Maven Central.   Over time we are going to start enforcing standards for security and quality of metadata.    If you have proper project metadata, PGP signatures, javadocs and sources your artifacts will fly into Central as quickly as possible.  Projects that submit poor Maven releases are going to have a more difficult time getting artifacts into Maven Central.   We&#8217;ll start to enforce these standards gradually and we&#8217;ll give the community time to adapt.  Any tool that creates bundles for deployment to Central is capable of producing these artifacts. The staging rules don&#8217;t care how the releases were constructed. So use whatever tools you like, you&#8217;ll just have to pass a minimal set of requirements to make it into the Central repository. Over time this should greatly improve the quality of Maven Central.</p>

<h3>Providing Metadata about Repositories</h3>

<p>For a long time we have been providing a way, through Nexus, and the stand-alone Nexus Indexer, to produce the Maven repository index.  The repository index contains information about all the artifacts in the given repository including class file information and project identifiers.  It is primarily used as part of IDE integration to help developers find dependencies based on artifact coordinates or class references, like import statements.   Using <a href="http://m2eclipse.sonatype.org">m2eclipse</a>, all you need to do to add a new dependency is type the name of a class into your code and search the index for matching dependencies.    You can also search the repository index for all of the available Maven archetypes when you are creating a new Eclipse project.    Both of these IDE use cases are possible because of the standard repository index format that was defined as part of the Nexus project.</p>

<p>The Nexus index format is also storing information about the presence of PGP signatures, javadocs, sources, and checksums.   Using Nexus and other tools that can read the Nexus index format, you can aggregate multiple repository indexes together and perform quick searches across multiple public repositories (as well as your own hosted repositories). The Nexus indices from the OSS repositories around the world are proving to be a critical resource, we can tell because it is the most requested item from Maven Central.  Index downloads amounted to 28TB of transfer last month.</p>

<h3>Polyglot Component Repositories</h3>

<p>The explosion of language choices has transformed the way most developers approach problem solving.   Just four years ago it would have been normal to walk into a corporation and see Java at all levels of the stack.  In 2010, most businesses have started to incorporate multiple languages and hybrid architectures into enterprise systems.   A system designed today might use Ruby on Rails (running under JRuby) to power a web site which interacts with a set of services coded in Java.  Services like Twitter rely on a foundation of Scala code executing on the JVM while other portions of the Twitter architecture use different languages and different technologies where they are most appropriate.</p>

<p>We are a polyglot industry, and while our software enterprises are run on a mixture of different languages, our development tools and build technologies are often locked into a single language or a single technology.   A Ruby application is built using Rake, a Scala application is built using Sake or the Maven Scala plugin, and Java or OSGi applications are built using Maven.   A Ruby library might generate and consume gems while a Java application might generate and consume JAR files.   There is currently no single, consolidated &#8220;Tower of Babel&#8221; to help developers translate between different types of software artifacts.   We&#8217;ve put a lot of effort into making the foundation of Nexus as agnostic as possible about what it is storing, and, because of this, we&#8217;re moving to add support for even more artifact types.</p>

<p>Nexus currently supports the two OSGi formats of P2 and OBR and we are just finishing our first draft of RubyGems support.   Polyglot Maven will drive us toward a Polyglot Nexus. As part of the work we&#8217;re doing on Polyglot Maven we may find that different scripting language implementations have slightly different requirements for dependency management or provisioning runtimes, and we&#8217;ll be ready for that.</p>

<h3>Where do we go from here?</h3>

<p>Next we&#8217;re thinking about ways to make statistics for a given project&#8217;s artifacts available to the project&#8217;s developers.  We have already implemented user signup in Nexus and we are currently working on project signup as well. What this means is that projects can register with a given groupId, or set of groupIds, and optionally be provisioned a repository which can be operated by a set of users. Once a project registers we will know what slice, or slices, of the statistics they need to see.   Our initial thought is that project statistics, number of downloads should only be made available to the public with the permission of each individual project. Brian and I along with Greg Luck and Dain Sundstrom have been working on a simple statistics mechanism that we hopefully can provide to projects early this year.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sonatype.com/people/2010/01/nexus-oss-ecosystem/feed/</wfw:commentRss>
		<slash:comments>167</slash:comments>
		</item>
	</channel>
</rss>
