Maven 模型生成器
有效的模型构建器,具有配置文件激活、继承、插值、...
主要组件是ModelBuilder(javadoc,source),其DefaultModelBuilder实现(javadoc,source)管理步骤顺序。
该序列分为2个阶段:
- 阶段1
- 配置文件激活:查看可用的激活器。请注意,模型插值尚未发生,基于文件的激活插值仅限于
${basedir}(从 Maven 3 开始)、系统属性和请求属性 - 原始模型验证:
ModelValidator(javadoc)及其DefaultModelValidator实现(source) - 模型规范化 - 合并重复项:(
ModelNormalizerjavadoc )及其DefaultModelNormalizer实现(source) - 配置文件注入:
ProfileInjector(javadoc),及其DefaultProfileInjector实现(source) - 父级分辨率直到超级 pom
- 继承程序集(见下文)
- 模型插值(见下文)
- url 规范化:(
UrlNormalizerjavadoc ),及其DefaultUrlNormalizer实现(source)
- 配置文件激活:查看可用的激活器。请注意,模型插值尚未发生,基于文件的激活插值仅限于
- 第 2 阶段,可选插件处理
- 模型路径翻译:
ModelPathTranslator(javadoc)及其DefaultModelPathTranslator实现(source) - 插件管理注入:
PluginManagementInjector(javadoc)及其DefaultPluginManagementInjector实现(source) - (可选)生命周期绑定注入:(
LifecycleBindingsInjectorjavadoc ),DefaultLifecycleBindingsInjector在 maven-core 中实现(source) - 依赖管理导入(用于该部分中类型
pom和范围的依赖)import<dependencyManagement> - 依赖管理注入:
DependencyManagementInjector(javadoc)及其DefaultDependencyManagementInjector实现(source) - 模型规范化 - 注入默认值:(
ModelNormalizerjavadoc )及其DefaultModelNormalizer实现(source) - (可选)报告配置:(
ReportConfigurationExpanderjavadoc )及其DefaultReportConfigurationExpander实现(source) - (可选)报告转换为解耦站点插件:(
ReportingConverterjavadoc )及其DefaultReportingConverter实现(source) - (可选)插件配置:(
PluginConfigurationExpanderjavadoc )及其DefaultPluginConfigurationExpander实现(source) - 有效的模型验证:
ModelValidator(javadoc)及其DefaultModelValidator实现(source)
- 模型路径翻译:
继承组装
继承组装包括用从父模型中获取的值填充当前模型的空字段。它是在InheritanceAssembler( javadoc ) 中完成的,并带有它的DefaultInheritanceAssembler实现 ( source )。
默认情况下,每个模型字段都按原样从父级继承,但有一些特意不继承的例外情况:modelVersion、artifactId、profiles(在阶段 1 中注入)和prerequisites.
请注意,模型中的 5 个 URL(project.url、project.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.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.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.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 版本的兼容性:



