java - 为什么当我在特定模块上运行 mvn version:set 时另一个模块版本也会更新(它不应该)
问题描述
我想我刚刚发现了一个“mvn version:set”-bug。我有一个多模块 Maven 项目。所有模块都有相同的父级。我想独立设置模块的版本。因此,如果模块 A 更改而模块 B 未更改,则只有模块 A 可以获得新版本。但是当我尝试制作 1 个模块的快照版本时。它还更改了另一个模块的版本,尽管我使用“-f /module_A/pom.xml”参数来专门针对 module_A。
复制路径:我尝试单独制作所有模块的 SNAPSHOT 版本(在 POM.xml 中)。因此每个模块的版本都会将其版本增加 0.1 并在其后面添加“-SNAPSHOT”。
我发现以下命令正是这样做的,但是 1 个模块的行为很奇怪,并且当另一个模块的版本更新时它也会更新。
mvn -f ./module_X/pom.xml 版本:设置 -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”参数专门针对目标模块_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 的父版本也与父 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。
解决方案
我有一个多模块 Maven 项目。所有模块都有相同的父级。我想独立设置模块的版本。
鉴于问题中的模块定义,您还希望为每个孩子独立设置父版本。这与所有模块具有相同的 parent相矛盾。
为了实现子模块中父模块的独立版本,后者不应引用文件夹中的父POM 。..
模块的定义应如下所示:
<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/>
</parent>
<artifactId>module_A</artifactId>
<version>1.2</version>
请注意<relativePath/>
in<parent>
标签。在这种情况下,当为子模块构建有效的 POM 时,Maven 将始终从存储库中获取父定义。
当然,您甚至需要在尝试构建任何子模块之前发布和部署父模块。
您可以查看Google 的 Auto project @ GitHub 以查看使用的类似结构。
推荐阅读
- sorting - 在 Power BI 中按列名排序
- amazon-web-services - 是否有 python 代码来查找 S3 存储桶中文件的长度
- arraylist - 如何比较两个 ArryList 并仅提取两个相似的索引?(在代码的最后评论中演示)(已解决!)
- python-3.x - NLP/ML 仅分类 2 个无监督主题
- spartacus-storefront - SmartEdit 预览 URL 和 Spartacus 上下文
- javascript - 离子滑块缩放 - 无法在被动事件侦听器调用中阻止默认值
- javascript - Node.js MSSQL 速度提升(50 MB = 25 秒)?
- c - 读取字符串然后执行操作
- python - 负前瞻后跟空格
- python - seaborn displot:不可比较的密度估计