Details
-
New Feature
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
The lifecycle is now defined as a tree of phases, each phase being split with a before: phase and a after: phase. Each phase is given a list of timing constraints: a phase from the same lifecycle (compile must be executed after sources), a phase in project dependencies (compile must execute after compile-only project dependencies have reached the ready phase).
The default lifecycle is defined in the DefaultLifecycleRegistry.
In addition to the before: and after: prefixes, an ordering can be defined by appending an integer inside brackets, for example, after:integration-test[1000].
Note that there are a few changes with the Maven 3 default lifecycle: it's a graph, so sources does not always execute after resources, nor compile after resources. Also, unit tests and integration tests have been moved to the verify phase which is run last inside the build phase, but not in the package phase. The goal is to have a phase (here, package which can run all the reactor with no tests). In order to be compatible, old phases are mapped to new ones using aliases. The install and deploy phases now depends on package, but not verify (and deploy does not require install). This currently only has an effect when calling mvn deploy with the concurrent builder (see MNG-8225).
It's missing the ability to create some scheduling constraints in the POM and to define custom phases. All executions in a given phase such as compile or after:sources are executed sequentially, but it would be nice to be able to execute them in different subphases, so that they could be executed concurrently.