【发布时间】:2021-05-31 04:58:15
【问题描述】:
我想我刚刚发现了一个“mvn version:set”-bug。我有一个多模块 Maven 项目。所有模块都有相同的父级。我想独立设置模块的版本。因此,如果模块 A 更改而模块 B 未更改,则只有模块 A 可以获得新版本。 但是当我尝试制作 1 个模块的快照版本时。它还会更改另一个模块的版本,尽管我使用“-f /module_A/pom.xml”参数来专门针对 module_A。
复制路径: 我尝试单独制作所有模块的快照版本(在 POM.xml 中)。因此每个模块的版本都会增加 0.1 并在其后面添加“-SNAPSHOT”。
我发现下面的命令正是这样做的,但是 1 个模块的行为很奇怪,并且当另一个模块的版本更新时它也会更新。
mvn -f ./module_X/pom.xml 版本:set -DnextSnapshot=true -DprocessParent=false -DprocessDependencies=false -Pjar
-我在根文件夹中运行命令。所有模块文件夹都位于此文件夹中。 -module_X 应替换为模块文件夹名称(module_A、module_B、module_C 等) -"-DnextSnapshot=true" 将版本增加 0.1 并添加 "-SNAPSHOT" -"-DprocessParent=false 确保模块 POM 中的父版本没有更改。 -"DprocessDependencies=false" 确保版本操作依赖项不会更改。 “-f /module_A/pom.xml”参数专门针对module_A。
好的,现在它变得奇怪了: 当我运行命令更新另一个模块时,其中一个模块的版本会更新。
My set-up:
Parent-pom version = 1.3
module_A version = 0.5
module_A parent-version = 1.3
module_B version = 1.2
module_B parent-version = 1.1
module_C version = 1.2
module_C parent-version = 1.2
module_D version = 1.3
module_D parent-version = 1.2
Module_C 是一个奇怪的行为模块,如果我尝试更新任何其他模块,它的版本会更新到 1.3。
**似乎模块的版本已更新,因为它的父版本和版本相同,并且它们与父 POM 中的版本不同
Module_B 的 parent-version 也与 parent-pom 不同,但该模块不会更新。 (因为 1.2(它的版本)与 1.1(它的父版本)不同。
为了测试这个理论,我创建了一个新模块“module_E”,其版本设置为 1.1,父版本也设置为 1.1。更新任何其他模块的版本后,module_E als 的版本设置为 1.3!所以版本会更新到最新的父版本!
有人知道我可以如何防止这种行为吗?这对我来说似乎不是理想的行为,对吧?
Parent-POM 最低限度:
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.project.service</groupId>
<artifactId>project-parent-pom</artifactId>
<version>1.3</version>
<packaging>pom</packaging>
<modules>
<module>module_A</module>
<module>module_B</module>
<module>module_C</module>
<module>module_D</module>
</modules>
module_C 最低限度:
<modelVersion>4.0.0</modelVersion>
<name>module_A</name>
<packaging>${packaging.type}</packaging>
<parent>
<artifactId>project-parent-pom</artifactId>
<groupId>com.project.service</groupId>
<version>1.2</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>module_A</artifactId>
<version>1.2</version>
**模块的 POM 都是相同的,除了名称(module_A、module_B 等、版本和父版本)
表现奇怪的奇怪模块是父版本与版本相同的模块(如“模块最低限度”中所示,两者都设置为 1.2)。在这些情况下,版本设置为与父 POM 的版本相同的版本。我还使用父版本和版本设置为 1.5 的模块进行了测试。同样的事情也发生了:版本从 1.5 升级到了 1.3。
【问题讨论】:
-
拥有多模块构建意味着默认情况下所有子/父级具有相同的版本号。这才是真正的问题。此外,问题是:您使用哪个版本的versions-maven-plugin?
-
请将 POM 的内容添加到问题中。将它们修剪到仍然显示问题的最低限度。
-
@khmarbaise,我希望模块的版本相互独立,所以我也可以在其他项目中单独使用它们。 maven版本插件版本是2.8.1
-
@illyaKysil,我为父 POM 和 module_C 添加了最低限度。除了名称、版本和父版本之外,所有其他模块都与 module_C 相同
-
单独使用它们与您的结构和版本无关。如果你有一个多模块构建和相同的版本,你也可以毫无问题地使用工件......?