Plugins and the Maven Lifecycle
In Chapter 10, you learned that lifecycles can be customized by packaging types. A plugin can both introduce a new packaging type and customize the lifecycle. In this section, you will learn how you can customize the lifecycle from a custom Maven plugin. You will also see how you can tell a Mojo to execute a parallel lifecycle.
Executing a Parallel Lifecycle
Let’s assume you write some goal that depends on the output
from a previous build. Maybe the
ZipMojo goal can run only if there is output
to include in an archive. You can specify something like a
prerequisite goal by using the @execute
annotation on a Mojo class. This annotation will cause Maven to
spawn a parallel build and execute a goal or a lifecycle in a
parallel instance of Maven that isn’t going to affect the current
build. Maybe you wrote some Mojo that you can run once a day that
runs mvn install and then
packages up all of the output in some sort of customized
distribution format. Your Mojo descriptor could tell Maven that
before you execute your CustomMojo, you’d
like it to execute the default lifecycle up to the
install phase and then expose the results of that
project to your Mojo as the property
${executedProject}. You could then reference
properties in that project before some sort of
postprocessing.
Another possibility is that you have a goal that does something completely unrelated to the default lifecycle. Let’s consider something completely unexpected. Maybe you have a goal that ...