Maven 模型生成器

有效的模型构建器,具有配置文件激活、继承、插值、...

主要组件是ModelBuilderjavadocsource),其DefaultModelBuilder实现(javadocsource)管理步骤顺序。

该序列分为2个阶段:

  • 阶段1
    • 配置文件激活:查看可用的激活器。请注意,模型插值尚未发生,基于文件的激活插值仅限于${basedir}(从 Maven 3 开始)、系统属性和请求属性
    • 原始模型验证:ModelValidatorjavadoc)及其DefaultModelValidator实现(source
    • 模型规范化 - 合并重复项:(ModelNormalizerjavadoc 及其DefaultModelNormalizer实现(source
    • 配置文件注入:ProfileInjectorjavadoc),及其DefaultProfileInjector实现(source
    • 父级分辨率直到超级 pom
    • 继承程序集(见下文
    • 模型插值(见下文
    • url 规范化:(UrlNormalizerjavadoc ,及其DefaultUrlNormalizer实现(source
  • 第 2 阶段,可选插件处理
    • 模型路径翻译:ModelPathTranslatorjavadoc)及其DefaultModelPathTranslator实现(source
    • 插件管理注入:PluginManagementInjectorjavadoc)及其DefaultPluginManagementInjector实现(source
    • (可选)生命周期绑定注入:(LifecycleBindingsInjectorjavadoc DefaultLifecycleBindingsInjector在 maven-core 中实现(source
    • 依赖管理导入(用于该部分中类型pom和范围的依赖)import<dependencyManagement>
    • 依赖管理注入:DependencyManagementInjectorjavadoc)及其DefaultDependencyManagementInjector实现(source
    • 模型规范化 - 注入默认值:(ModelNormalizerjavadoc 及其DefaultModelNormalizer实现(source
    • (可选)报告配置:(ReportConfigurationExpanderjavadoc 及其DefaultReportConfigurationExpander实现(source
    • (可选)报告转换为解耦站点插件:(ReportingConverterjavadoc 及其DefaultReportingConverter实现(source
    • (可选)插件配置:(PluginConfigurationExpanderjavadoc 及其DefaultPluginConfigurationExpander实现(source
    • 有效的模型验证:ModelValidatorjavadoc)及其DefaultModelValidator实现(source

继承组装

继承组装包括用从父模型中获取的值填充当前模型的空字段。它是在InheritanceAssembler( javadoc ) 中完成的,并带有它的DefaultInheritanceAssembler实现 ( source )。

默认情况下,每个模型字段都按原样从父级继承,但有一些特意不继承的例外情况:modelVersionartifactIdprofiles(在阶段 1 中注入)和prerequisites.

请注意,模型中的 5 个 URL(project.urlproject.scm.connection、和)具有特殊的继承处理:project.scm.developerConnectionproject.scm.urlproject.distributionManagement.site.url

  • 如果未在当前模型中配置,则继承值是父级的值,附加当前工件 ID,
  • 从 Maven 3.5.0 开始,如果project.directory定义了 POM 属性值,则使用它来代替工件 ID:当模块目录名称不等于工件 ID 时,这允许默认继承计算。请注意,此属性不会从 POM 继承到其子代:如果未设置属性,则子代 POM 将使用子工件 ID。
  • false从 Maven 3.6.1 开始,继承可以通过为每个 url设置模型属性值来避免将任何路径附加到父值:project/@child.project.url.inherit.append.pathproject/distributionManagement/site/@child.site.url.inherit.append.pathproject/scm/@child.scm.connection.inherit.append.path和.project/scm/@child.scm.developerConnection.inherit.append.pathproject/scm/@child.scm.url.inherit.append.path

模型插值

模型插值在于${...}用计算值替换。它是在StringSearchModelInterpolatorjavadocsource)中完成的。

请注意,模型插值发生配置文件激活之后,然后配置文件激活不会从每个值中受益:基于文件的激活插值仅限于${basedir}(在 Maven 3 中引入并且在此上下文中不推荐使用)、系统属性和请求属性.

值从不同的语法按顺序评估:

价值 评价结果 常见的例子
project.* 
pom.*已弃用) 
*已弃用
POM 内容(参见POM 参考 ${project.version} 
${project.build.finalName} 
${project.artifactId} 
${project.build.directory}
project.basedir 
pom.basedir已弃用) 
basedir已弃用
包含pom.xml文件的目录 ${project.basedir}
project.baseUri 
pom.baseUri已弃用
包含pom.xml文件的目录作为 URI ${project.baseUri}
build.timestamp 
maven.build.timestamp
构建开始的 UTC 时间戳,yyyy-MM-dd'T'HH:mm:ss'Z'默认格式,可以用maven.build.timestamp.formatPOM 属性覆盖 ${maven.build.timestamp}
* 用户属性,从 CLI 设置-Dproperty=value ${skipTests}
* 模型属性,例如在 pom 中设置的项目属性 ${any.key}
maven.home 当前 Maven 主页的路径。 ${maven.home}
maven.version 当前 Maven 执行的版本号(从 3.0.4 开始)。例如,“ 3.0.5”。 ${maven.version}
maven.build.version 当前 Maven 执行的完整构建版本(自 3.0.4 起)。例如,“ Apache Maven 3.2.2 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19T14:51:28+01:00)”。 ${maven.build.version}
maven.repo.local 本地机器上的存储库 Maven 将用于存储已安装和下载的工件(POM、JAR 等)。 ${user.home}/.m2/repository
* Java 系统属性(参见JDK 参考 ${user.home} 
${java.home}
env.* 
*
环境变量 ${env.PATH}
settings.* 本地用户设置(参见设置参考 ${settings.localRepository}

注意

  • 模型插值后,${...}内容可以保留在模型中,稍后在设置插件参数时进行评估。这尤其适用于Settings Modelsettings.*的值,
  • 编码配置已被定义为看起来像 POM 内容但未添加到 POM 模型的 POM 属性以保持与以前的 Maven 版本的兼容性: