Using Extensions
Extensions are a way to add classes to either the Core Classloader (Core Extensions) or the Project Classloader (Build Extensions). This is necessary for adjusting Maven in a way that affects more than just one plug-in.
The mechanism allows extensions to either replace default Sisu components with custom ones or add new components which are used at run time. In addition one could also expose additional packages from the Core Classloader.
Extensions are typically used to enable Wagon providers, used for the transport of artifact between repositories, and plug-ins which provide lifecycle enhancements.
Loading Extensions
There are different means of loading extensions depending on the type. There are core extensions which are loaded early and build extensions which are loaded late. Some extensions require early loading as they fundamentally change Maven behaviour. An extension's documentation should indicate whether it provides a core or a build extension.
Core Extension
- Registered via extension jar in
${maven.home}/lib/ext
- Registered via CLI argument
mvn -Dmaven.ext.class.path=extension.jar
- Registered via
.mvn/extensions.xml
file
Build Extension
- Registered via
project->build->plugins->plugin
with elementextensions
being set totrue
. This is useful for regular plug-ins carrying some extensions.Example:
<project> ... <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> ... </configuration> </plugin> </plugins> </build> ... </project>
- Registered as build extension in
project->build->extensions->extension
Example:
<project> ... <build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ftp</artifactId> <version>2.10</version> </extension> </extensions> </build> ... </project>