Wednesday, October 1, 2008

Nexus

Lately, I've been reviewing Nexus, a maven repository manager for use within our company. Previous to that, I had just been using the maven ant tasks library to install dependencies into a web accessible filesystem on our corporate network. As I've looked at Nexus, a handful of things stood out to me as reasons why I am going to use it both as our corporate repository manager as well as a local proxy.

Reliability, Performance, and Memory Usage

Previously, I had tried Archiva. Although it is good at what it does, it would sometimes have reliability problems. Beyond that, with the load that we put on it and the fact that it shares the VMWare instance with Bamboo, it tended to bog things down and make the Bamboo server even less responsive than it normally is within the VM.

Nexus uses less memory, appears to be more reliable, and appears to take less CPU thus far. Granted, I haven't turned on the firehose yet, but with small tests, it appears to perform better, more reliably and with considerably less memory.

Installing artifacts

Using Firefox, I was able to just right-click on a repository and go to upload an artifact to the repository, say, in the case of a third-party library that isn't available in the public repositories. I liked how simple it was.

Groups

I'm not sure if the concept is unique to nexus, but they use groups to act as a aggregation of repositories - so you can point locally to the group instead of individual repositories. That way, everything, including public maven2 dependencies, can be resolved through the group. It can also be partitioned into public and corporate groups or for releases and snapshots or a combination of those. I like the fact that maven only has to point to one location though to retrieve any artifact. It saves time when trying to resolve a third-party dependency, for example, and if it has to search a different repository location, that's an extra call over the network.

Local repository proxy

One thing suggested on the nexus IRC channel was using it as a local repository proxy. That makes it so you can have everything public and third-party related stored in a local proxy in case you want to blow away your repository and start fresh. It makes doing so quite fast. Also, with IDE plugins, it speeds up the checking for updates considerably.

Installation

Though they are currently looking into making it available as a separate war file, it is currently installed as a complete server, using the jetty server underneath. The actual repository and all configuration is done separate from the server directory for easy upgrading. I appreciated that since often upgrades for things like Tomcat get a little dicey with the default configuration in place (e.g. webapps, server.xml, etc.).

Conclusion

Besides the nice ajaxy interface, I really like nexus as it feels complete, even though it's just at version 1.0.2 last I checked. Sonatype has done a good job with it thus far. I'm looking forward to pushing it live on our corporate network within the next couple of days.

See also: the great (completely unrelated) board game Nexus Ops