Maven 模型生成器

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

主要组件是ModelBuilder ( javadoc , source ),其DefaultModelBuilder实现 ( javadoc , source ) 用于管理步骤序列。

该序列分为2个阶段:

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

继承组装

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

默认情况下,每个模型字段都按原样从父级继承,除了一些故意不继承的例外:modelVersionartifactIdprofiles(在阶段 1 中注入)和先决条件

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

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

模型插值

模型插值包括用计算值替换${...} 。它在StringSearchModelInterpolator ( javadoc , source ) 中完成。

请注意,模型插值发生配置文件激活之后,然后配置文件激活不会从每个值中受益:基于文件激活的插值仅限于${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.format POM 属性覆盖 ${maven.build.timestamp}
* 用户属性,使用-Dproperty=value从 CLI 设置 ${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.PATH}
设置。* 本地用户设置(参见设置参考 ${settings.localRepository}

注意

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