pom.xml - 来自父 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 中,而且您会发现 Maven 不喜欢将诸如绝对文件系统路径之类的其他信息注入到 POM 中。
这有很好的理由。
首先是便携性。正如我多次说过的那样,Maven 的优点之一是我可以执行“mvn clean”,压缩项目,将其发送到 Ulan Bator,那里的人可以完全复制仅使用 JDK 和 Maven 武装的可执行文件,没有丢失的文件,没有“版本地狱”。如果您不认为这很重要,那么您从未在一家商店工作过,在那里您被要求使用来自另一个部门的东西,他们的目录设置与您的完全不同和/或不同版本的库安装在不同的系统上。
与此相关的是自给自足的概念。正如我所说,要忠实地重新构建项目,您需要的只是 Maven 和兼容的 JDK。时期。
现在让我们考虑一下您有一个要在 POM 树中应用的主版本号的情况。没有。这不是 Maven 方式。每个 Maven 人工制品版本都是对其构建项目的一组独特更改的指标。您不只是创建具有不同版本号的重复工件。这不仅会导致混乱,而且还不允许逐步迁移项目的子组件之类的事情。
您应该构建您的 POMS - 所有这些 - 安装到您的本地存储库中,在企业环境中,我进一步建议安装到共享的内部存储库,这样人们就不必手动来回传递东西。如果您进入持续集成,这也是您通常希望通宵构建和测试运行的地方。
您可能需要进行快照构建。它们是通常针对您所描述的事情所做的事情。Maven的快照构建相当不错。
推荐阅读
- javascript - 如何将 firbase 函数从 (functions.https.onRequest) 更改为 (functions.https.onCall)?
- javascript - 如果 api 没有提供任何选项(每页数据项),如何创建分页?
- java - 如何在 Mongodb-java 驱动程序中获取 Arrays ArrayOfObjects 的值
- tfs - 无法在 OSX Catalina 上访问 Private Nuget
- c# - 在 C# 中,如何在单击 Windows 窗体中的按钮后将某些内容打印到控制台?
- javascript - 如何重定向到 Framework7 路由器中的另一个路由?
- google-cloud-platform - 对于 GCP 应用引擎,使用 requirements.txt 指定依赖项的安装顺序
- regex - 带有QueryParam的Wiremock不匹配正则表达式
- docker-compose - Docker-compose 将子网设置为变量结果“应该使用 CIDR 格式”
- typescript - Value not yet initialized in parent class when calling method from base class