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) - 依赖管理导入(用于该部分中类型
pom
和范围的依赖)import
<dependencyManagement>
- 依赖管理注入:
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 )。
默认情况下,每个模型字段都按原样从父级继承,但有一些特意不继承的例外情况:modelVersion
、artifactId
、profiles
(在阶段 1 中注入)和prerequisites
.
请注意,模型中的 5 个 URL(project.url
、project.scm.connection
、和)具有特殊的继承处理:project.scm.developerConnection
project.scm.url
project.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.path
、project/distributionManagement/site/@child.site.url.inherit.append.path
、project/scm/@child.scm.connection.inherit.append.path
和.project/scm/@child.scm.developerConnection.inherit.append.path
project/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} |
* |
用户属性,从 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 版本的兼容性: