In several of the Nexus Pro blog posts, we have mentioned that the Pro features are just plugins to the OSS Core, but we haven't formally discussed it yet. This blog post is an attempt to introduce the Nexus Plugin API.
Most of the architectural work being done to Nexus in the 1.1, 1.2, 1.3 releases has been done to build and enhance the plugin model and convert existing 1.0 features to the new model. Right now a Nexus plugin is essentially a jar containing plexus components and resources such as Javascript alongside a simple descriptor. Nexus plugins are able to add new REST services, add components that affect a request, and even add new UI elements and menu options to the user interface. A look at the functionality defined by each of the Pro features gives a good overview of how significant a plugin can be:
Plugins are also able to:
The current plugin model requires a restart of Nexus to introduce new plugins. Jason has built a plugin manager based on the Maven plugin model and work is already underway to integrate this into Nexus 1.4. The plugin manager will allow plugins to be loaded/unloaded/reloaded in real time without restarting the system. Full API documentation and examples is under construction and will be covered in future versions the Nexus Book.
All further functionality we build, both OSS core and Pro will be built as a plugin, which means the plugin model will expand and become more robust over time. It's not an unused API sitting idle.
Justin Edelson has already come forward with a Crowd plugin for Nexus and a release is imminent in the Sonatype Forge - Nexus Plugins project. This will be a significant milestone as it represents the first plugin built and released entirely outside the core Nexus team. There have also been a number of simple LDAP plugins created by third-parties, and while we certainly believe that our own LDAP is more capable the fact that there are already competing options is a testament to the flexibility of the product.
If you have a Nexus plugin or want to write one, please ping us on the Nexus Developer list. We will provide SVN, Jira, Confluence and Nexus repository services via the Sonatype Forge to support this effort.