首页 > 解决方案 > 在 pom.xml 中调用属性的层次结构

问题描述

我有一个包含多个嵌套项目的 Maven 项目。它们都始终具有相同的版本。到目前为止,如果我想增加版本,我浏览了所有 pom.xml 文件并更改了版本号。

现在,我想将版本外包给父 pom.xml 文件的属性标记。它适用于所有嵌套项目,但不适用于父 pom 本身。

pom.xml 中的属性是按什么顺序调用的?我无法在父 pom.xml 文件中引用项目版本。

代码片段显示了父 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <groupId>com.my.project</groupId>
    <artifactId>my.project</artifactId>
    <packaging>pom</packaging>
    <version>${projectVersion}</version>
    <properties>
        <projectVersion>1.0.0</projectVersion>
        ...
    </properties>
    <modules>
        <module>my.project.service</module>
        <module>my.project.db</module>
        ...
    </modules>

我希望 pom 采用属性中定义的版本号。但是由于错误无效的参考格式而无法构建

标签: mavenversionpom.xmlcall-hierarchy

解决方案


我希望 pom 采用属性中定义的版本号。但是由于错误无效的参考格式而无法构建

通过从父项目运行一个maven目标,maven首先在当前构建过程中绑定了artifact/group/version,所以它使用这里定义的版本: <version>${projectVersion}</version>

我无法在父 pom.xml 文件中引用项目版本。

在这种情况下,您可以通过创建一个聚合器/多模块项目来“作弊”,该项目定义了一个未使用/伪造的版本(1.0-NOT-USED例如),该版本具有父 pom.xml 的唯一模块。当您构建聚合器/多模块项目时,您现在可以将要在父项目及其所有模块中使用的版本作为参数传递。

附带说明一下,要为一组项目使用中央版本,您应该使用flatten maven 插件,它可以让您从地狱版本管理中解脱出来。


推荐阅读