微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么当我在特定模块上运行 mvn version:set 时另一个模块版本也会更新它不应该

如何解决为什么当我在特定模块上运行 mvn version:set 时另一个模块版本也会更新它不应该

我想我刚刚发现了一个“mvn version:set”错误我有一个多模块 Maven 项目。所有模块都具有相同的父级。我想设置彼此独立的模块版本。因此,如果模块 A 更改而模块 B 未更改,则只有模块 A 可以获得新版本。 但是当我尝试制作 1 个模块的 SNAPSHOT 版本时。它还会更改另一个模块的版本,尽管我使用“-f /module_A/pom.xml”参数专门针对 module_A。

复制路径: 我尝试单独制作所有模块的 SNAPSHOT 版本(在 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-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 项目。所有模块都具有相同的父级。我想设置彼此独立的模块版本。

根据问题中的模块定义,您还想为每个独立设置的版本。这与所有模块都具有相同的父级相矛盾。

为了在child模块中实现parents的独立版本,后者应该在{{1 }} 文件夹。

模块的定义应如下所示:

..

请注意 <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/>。在这种情况下,当为 child 模块构建有效的 POM 时,Maven 将总是从存储库中获取定义。

当然,在尝试构建任何模块之前,您需要发布和部署模块。

您可以查看 Google's Auto project @GitHub 以查看使用的类似结构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。