- Further improvements to project configuration APIs (getting ready for 1.0 API freeze)
- Ground work necessary to address MNGECLIPSE-823
- New Maven Embedder
Maven Project Lifecycle Mapping MNGECLIPSE-1271
New concept. Encapsulates mapping of Maven project configuration and lifecycle bindings to Eclipse project configuration and builder(s). The goal is to give m2e exploiters and end-users greater flexibility and control over how Maven projects behave in Eclipse.
Initially, Lifecycle Mapping will serve two primary purposes. It will define what project configurators should be used to configure Maven Project in Eclipse and the order the project configurators are applied. It will also define how Maven participates in Eclipse build. In the future, role of lifecycle Mapping will likely extend to include configuration validation and synchronization between Maven and Eclipse project configuration, but initial implementation will not provide this functionality.
Although there is a strong relation between Lifecycle Mapping and project packaging type, some Lifecycle Mapping will be able to work with multiple packaging types and some packaging types will be supported by multiple Lifecycle Mappings.
Lifecycle Mapping will be associated with projects using pom.xml file (details to be defined). Without explicit configuration, m2e will use default lifecycle mapping for project packaging type, if configured, or global default mapping.
Default Lifecycle Mapping will implement behaviour currently present in m2e 0.9.7. Specifically, it will consider all available project configurators and will execute specified Maven goals during project import, clean project build and on resource changes. Individual project configurators will be able to opt-out of default lifecycle mapping (details to be defined).
To validate API (and to make some users happy) m2e will provide three (possibly more) non-default Lifecycle Mappings.
"POM only", essentially a noop mapping, will be used as the default for projects with packaging=pom.
"JDT Java" will rely on JDT to both compile Java classes and copy project resources. It will NOT execute Maven build or individual mojo during Eclipse build.
"Incremental Maven Build" will use plexus-build-api APIs to directly execute compatible mojos during Eclipse build. This will be highly experimental initially, but the goal is to eventually use this mapping by default for compatible projects.
Individual project configurators will be able to directly participate in Eclipse builds. To support this, AbstractProjectConfigurator will get new optional callback and helper methods.
Individual classpath configurators will be able to contribute project-level classpath entries. Project source path configuration logic will be refactored out of JDT project configurator core to a new classpath configurator.
Although not strictly necessary, I would like to take this opportunity to cleanup classpath configurators extension point and APIs. One idea is to try to remove AbstractClasspathConfiguratorFactory.
See https://issues.sonatype.org/browse/MNGECLIPSE-1197. This will allow use of m2e on Eclipse 3.5. It is also required to properly implement "Incremental Maven Build" Lifecycle Mapping.
New embedder MNGECLIPSE-1321
Include maven embedder 3.0-alpha-3 or newer.
The new embedder should provide much faster getBuildPlan (or equivalent). It should also provide ability to cache maven plugin classloaders (required to properly implement "Incremental Maven Build" Lifecycle Mapping).