Version 1.0 of the Nexus Maven Repository Manager has been released. Since the previous beta just 2 weeks ago, a decent number of fixes where made including some enhancements to the Nexus Indexer to improve search results for attached artifacts. Some changes where made to the configuration storage to simplify future upgrades, so be sure to view the changes and upgrade notes before upgrading.
Since this is a 1.0 release, it’s a good time to recap all the functionality that Nexus provides.
First and foremost, Nexus is a Maven Repository Manager, which means it serves as a local caching proxy for Maven repositories. It is also able to host internal snapshot and release repositories for your organization. Also included is the ability to serve M2 repositories to Maven 1 and vice-versa via “Virtual Repositories”.
Nexus allows you to take multiple repositories, whether proxies, hosted or virtual and logically present them to Maven as a single repository. The power in doing this is that control of adding new repositories is now centralized instead of spread across many poms or developer settings files. Along with Centralization of the repositories comes the ability to block and override dependencies as needed for the entire organization.
The major distinguishing factor of Nexus is the ability to fully manage and configure the system using an Ajax UI built with ExtJS. Using Ajax allows the UI to be fast and responsive so you can make changes quickly without waiting for JSP pages to load after each click. The Nexus UI is actually a REST client since all the communication to the server is done via REST api’s which means everything is integrate able into scripts and other tools as needed.
Another distinguisher is the memory footprint of Nexus. It runs on a fully loaded system such using as little as 28mb of ram. Even our public instance, which is pounded constantly by the Maven CI system is running with the default heap space of 64mb. Nexus is able to do this because it does not require a heavy database for artifact storage (they are stored in a regular Maven2 file based layout, making incremental backups a snap), and it doesn’t use a heavy webdav implementation. The Maven gets and puts are fully supported by the same REST api that the UI uses…no extended wagon is required with Nexus.
The Nexus Indexer component is used by several repositories, including Central, to publish searchable indexes of Maven artifacts. Several tools, including M2Eclipse are able to consume these indexes and allow class file level searching in IDEs. Nexus is able to proxy the remote indexes as well as produce them for internal repositories. Like the repository aggregation, Nexus is able to aggregate all the indexes into a single logical group, providing a single download for each developer using M2Eclipse. The indexes are also fully searchable via the UI. An applet is included to locally calculate checksums and then search the index to fingerprint unknown / unversioned artifacts.
All maintenance tasks are executable on demand and also via a scheduler. These things include snapshot repository clean up, unused proxy artifact purging, reindexing, and others.
Nexus is secured with a role-based security implemenation built on top of the JSecurity framework. This provides a light yet powerfull and extensible security model. Every REST api is exposed as an individual privilege that can be grouped into roles. Also included is the ability to control create, read, update and delete access for subsets of the repository based on their path. This means you can logically partition repositories into sets of artifacts maintained/owned by separate teams…in fact these sets of artifacts are able to span repositories (think snapshot, release and staging for example) using the same “Repository Target” to simplify security administration.
RSS feeds are provided for notification of newly deployed and/or cached artifacts as well as configuration and system state changes. Malformed poms are also logged to a feed for future resolution.
For those of you tired of manually deploying 3rd party / commercial jars and fighting with the command line deploy:deploy-file, Nexus provides a UI for uploading directly to the repository. A pom can be included or just the basic information provided and Nexus will create a pom for you.
Nexus is an open source project using the GPL license so patches and feature contributions are welcome.
Check out the Nexus site for more information and links to the mailing lists, source, faqs, and more. You can find us on IRC at irc.codehaus.org, #nexus for questions, comments and assistance, and follow SonatypeNexus on twitter to see what we’re up to next.
What are you waiting for? Download your copy of Nexus today.