让 Maven 儿童 pom 具有与父级相同的版本号?

2022-09-04 22:21:06

我有一个多模块(聚合器)Maven项目,它也从父pom继承属性。所以在我的父母pom中.xml我有这个:

<groupId>com.something.project</groupId>
<artifactId>MyProject</artifactId>
<packaging>pom</packaging>
<version>1.0.123</version>

<modules>
    <module>ModuleA</module>
    <module>ModuleB</module>
    <module>ModuleC</module>
</modules>

我想让所有子模块继承父版本号,但子模块要求我继续硬编码父级的版本号(ModuleA pom.xml示例):1.0.123pom.xml

<artifactId>ModuleA</artifactId>
<name>Some Amazing Thing</name>

<parent>
    <relativePath>../</relativePath>
    <artifactId>MyProject</artifactId>
    <version>1.0.123</version>
    <groupId>com.something.project</groupId>
</parent>

我怎么能把版本号放在父pom中,让模块继承它而不必在多个地方更新它?到目前为止,我已经尝试了${project.version}和${project.parent.version},Maven似乎对此非常不满意。我也不能完全删除版本引用。

有人对此有一个很好的答案吗?


答案 1

通常,如果您使用maven来管理版本,则将父版本放在子模块pom中不是问题。当您运行maven发布插件时,它将为您更新所有子模块中的所有版本。

更新:

如果您想自己管理版本,那么您可能会感到有些痛苦。我很确定你必须在每个pom中至少指定一次版本号。您可以通过编写一些脚本来为自己简化事情,这些脚本可以为您执行递归搜索和替换(而不是手动执行此操作)。

作为一个侧面的背景:maven是用“最好的(maven)做事方式”的心态构建的。如果你遵循这种方式,事情通常往往非常简单,并且工作得很好。以不同的方式做事通常是可能的,但是你离“最好的方法”越远,事情就越痛苦(或不可能)。


答案 2

我想这已经回答了@你能从Maven中的父POM继承版本吗?

我尝试了解决方案,它对我有用(使用Apache Maven 3.0.5)。但是,它有局限性,如果我们直接进入子pom并构建,它不会解析版本变量。


推荐