添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Maven Model Builder

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:

  • phase 1
  • raw model validation: ModelValidator ( javadoc ), with its DefaultModelValidator implementation ( source )
  • profile activation: see available activators . Notice that model interpolation hasn't happened yet, then interpolation for file-based activation is limited to ${basedir} (since Maven 3), System properties and request properties
  • model normalization: ModelNormalizer ( javadoc ), with its DefaultModelNormalizer implementation ( source )
  • profile injection
  • parent resolution until super-pom
  • inheritance assembly: InheritanceAssembler ( javadoc ), with its DefaultInheritanceAssembler implementation ( source )
  • model interpolation (see below)
  • url normalization: UrlNormalizer ( javadoc ), with its DefaultUrlNormalizer implementation ( source )
  • phase 2
  • model path translation: ModelPathTranslator ( javadoc ), with its DefaultModelPathTranslator implementation ( source )
  • plugin management injection
  • (optional) lifecycle bindings injection
  • dependency management import (for dependencies of type pom in the <dependencyManagement> section)
  • dependency management injection
  • (optional) reports configuration
  • (optional) reports conversion to decoupled site plugin
  • (optional) plugins configuration
  • effective model validation: ModelValidator ( javadoc ), with its DefaultModelValidator implementation ( source )
  • Model Interpolation

    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}

    Notice

  • after model interpolation, ${...} content can remain in the model that will be evaluated later when setting plugin parameters. This happens in particular with settings.* values for Settings Model ,
  • encoding configuration have been defined as POM properties looking like POM content but not added to POM model to maintain compatibility with previous Maven versions:
  • ${project.build.sourceEncoding} for source files encoding (defaults to platform encoding)
  • ${project.reporting.outputEncoding} for reporting output files encoding (defaults to UTF-8 )
  •