The Plexus project provides a full software stack for creating and executing software projects. Based on the Plexus container, the applications can utilise component-oriented programming to build modular, reusable components that can easily be assembled and reused.
While Plexus is similar to other inversion-of-control (IoC) or dependency injection frameworks such as the Spring Framework, it is a full-fledged container that supports many more features such as:
- Component lifecycles
- Component instantiation strategies
- Nested containers
- Component configuration
- Component dependencies, and
- Various dependency injection techniques including constructor injection, setter injection, and private field injection.
The Plexus project provides a number of pre-built components for common tasks and toolkits such as Jetty, Velocity, Hibernate, i18n, and many more. However, Plexus is also able to reuse your existing components written for other IoC frameworks such as Spring, Avalon and Pico Container unmodified, as well as allowing you to reuse your existing code inside the Plexus Container.
Plexus comes with an application server that can run your applications, making it trivial to build a standalone executable distribution with common features such as service execution if needed. However, Plexus applications can be run in any environment by embedding the container in an existing application, including Java EE applications or web applications.
Components in Plexus need not be written in Java, with component factories existing for Jython, JRuby, Beanshell, and Groovy.
The Plexus container is currently used in a number of applications and frameworks, most notably Maven 2.0 and Webwork 2.2 (Struts Action Framework 2.0).