The effective model builder, with profile activation, inheritance, interpolation, ...
The main component is ModelBuilder (javadoc, source), with its DefaultModelBuilder implementation (javadoc, source) that manages the steps sequence.
The sequence is divided into 2 phases, with optional plugin processing:
Model Interpolation consists in replacing ${...} with calculated value. It is done in StringSearchModelInterpolator (javadoc, source).
Notice that model interpolation happens after profile activation, then profile activation doesn't benefit from every values: interpolation for file-based activation is limited to ${basedir} (which was introduced in Maven 3 and is not deprecated in this context), System properties and request properties.
Values are evaluated in sequence from different syntaxes:
value | evaluation result | common examples |
---|---|---|
project.* pom.* (deprecated) * (deprecated) |
POM content (see POM reference) | ${project.version} ${project.build.finalName} ${project.artifactId} ${project.build.directory} |
project.basedir pom.basedir (deprecated) basedir (deprecated) |
the directory containing the pom.xml file | ${project.basedir} |
project.baseUri pom.baseUri (deprecated) |
the directory containing the pom.xml file as URI | ${project.baseUri} |
build.timestamp maven.build.timestamp |
the UTC timestamp of build start, in yyyy-MM-dd'T'HH:mm:ss'Z' default format, which can be overridden with maven.build.timestamp.format POM property | ${maven.build.timestamp} |
* | user properties, set from CLI with -Dproperty=value | ${skipTests} |
* | model properties, such as project properties set in the pom | ${any.key} |
maven.home | The path to the current Maven home. | ${maven.home} |
maven.version | The version number of the current Maven execution (since 3.0.4). For example, "3.0.5". | ${maven.version} |
maven.build.version | The full build version of the current Maven execution (since 3.0.4). For example, "Apache Maven 3.2.2 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19T14:51:28+01:00)". | ${maven.build.version} |
* | Java system properties (see JDK reference) | ${user.home} ${java.home} |
env.* * |
environment variables | ${env.PATH} |
settings.* | Local user settings (see settings reference) | ${settings.localRepository} |