首页 > 解决方案 > 来自父 POM 的模块 POM 的版本

问题描述

有没有办法从父 POM 中引用模块 POM 的版本属性?理想情况下是这样的:${project.modules[0].version}


<?xml version="1.0" encoding="UTF-8"?>
<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">
    <modelVersion>4.0.0</modelVersion>
 
    <!-- parent pom (me) -->
    <groupId>net.example.rsp</groupId>
    <artifactId>auth-service-builder</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0</version>
 
    <!-- sub modules -->
    <modules>
        <module>../auth-service</module>
        <module>../common</module>
        <module>../auth-common</module>
        <module>../auth-interface</module>
    </modules>
 
    ...
</project>

标签: pom.xml

解决方案


您不仅不能将版本信息传递到子 POM 中,而且您会发现 Maven 不喜欢将诸如绝对文件系统路径之类的其他信息注入到 POM 中。

这有很好的理由。

首先是便携性。正如我多次说过的那样,Maven 的优点之一是我可以执行“mvn clean”,压缩项目,将其发送到 Ulan Bator,那里的人可以完全复制仅使用 JDK 和 Maven 武装的可执行文件,没有丢失的文件,没有“版本地狱”。如果您不认为这很重要,那么您从未在一家商店工作过,在那里您被要求使用来自另一个部门的东西,他们的目录设置与您的完全不同和/或不同版本的库安装在不同的系统上。

与此相关的是自给自足的概念。正如我所说,要忠实地重新构建项目,您需要的只是 Maven 和兼容的 JDK。时期。

现在让我们考虑一下您有一个要在 POM 树中应用的主版本号的情况。没有。这不是 Maven 方式。每个 Maven 人工制品版本都是对其构建项目的一组独特更改的指标。您不只是创建具有不同版本号的重复工件。这不仅会导致混乱,而且还不允许逐步迁移项目的子组件之类的事情。

您应该构建您的 POMS - 所有这些 - 安装到您的本地存储库中,在企业环境中,我进一步建议安装到共享的内部存储库,这样人们就不必手动来回传递东西。如果您进入持续集成,这也是您通常希望通宵构建和测试运行的地方。

您可能需要进行快照构建。它们是通常针对您所描述的事情所做的事情。Maven的快照构建相当不错。


推荐阅读