Assembly Basics
Before we go any further, itâs best to take a minute and talk
about the two main goals in the Assembly plugin:
assembly:assembly
and the single
mojo. We list these two goals in different ways to
reflect the difference in how theyâre used. The assembly:assembly
goal is designed to
be invoked directly from the command line and should never be bound to
a build lifecycle phase. In contrast, the single
mojo is designed to be a part of your everyday build and should be
bound to a phase in your projectâs build lifecycle.
The main reason for this difference is that the
assembly:assembly
goal is what Maven terms an
aggregator
mojoâthat is, a mojo
that is designed to run at most once in a build, regardless of how
many projects are being built. It draws its configuration from the
root project, usually the top-level POM or the
command line. When bound to a lifecycle, an aggregator
mojo can have some nasty side
effects. It can force the execution of the package
lifecycle phase to execute ahead of time, and it can result in builds
that end up executing the package
phase
twice.
Because the assembly:assembly
goal is an
aggregator
mojo, it raises some
issues in multimodule Maven
builds, and it should be called only as a standalone mojo from the
command line. Never bind an assembly:assembly
execution to a
lifecycle phase. assembly:assembly
was the original goal in the Assembly plugin and was never designed to be part of the standard build process for a project. As it became ...
Get Maven: The Definitive Guide now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.