java—为什么在运行mvn时另一个模块版本也会更新version:set on 特定模块(不应该)

jv4diomz  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(266)

我想我刚找到一个“mvn”version:set“-臭虫。我有一个多模块maven项目。所有模块都有相同的父模块。我想独立设置模块的版本。因此,如果模块a被更改而模块b没有更改,则只有模块a可以获得新版本。但是当我尝试制作1模块的快照版本时。它还更改了另一个模块的版本,尽管我使用“-f/module\u a/pom.xml”参数专门针对模块\u a。
复制路径:我尝试分别创建所有模块的快照版本(在pom.xml中)。因此,每个模块的版本将其版本增加0.1,并在其后面添加“-snapshot”。
我发现下面的命令确实做到了这一点,但是1个模块的行为很奇怪,当另一个模块的版本更新时,它也会得到更新。
mvn-f./module\u x/pom.xmlversions:set -dnextsnapshot=true -dprocessparent=false-dprocessdependencies=false-pjar
-我在根文件夹中运行命令。所有模块文件夹都位于该文件夹中-模块\u x应替换为模块文件夹名称(模块\u a、模块\u b、模块\u c等)-“-dnextsnapshot=true”将版本增加0.1,并添加“-snapshot”-“-dprocessparent=false以确保模块pom中的父级版本未更改。-”dprocessdependencies=false“确保不更改依赖项的版本。”-f/module\u a/pom.xml“参数指定为目标模块\u 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

模块c是一个奇怪的行为模块,如果我尝试更新其他模块,它的版本会更新到1.3。

**似乎模块的版本得到了更新,因为它的父版本和版本是相同的,并且它们与父pom中的版本不同

模块\u b的父版本也不与父pom相同,但此模块不会得到更新(因为1.2(它的版本)和1.1(它的父版本)不一样。
为了验证这个理论,我创建了一个新的模块“module\ e”,其版本设置为1.1,父版本也设置为1.1。在更新任何其他模块的版本后,模块的版本设置为1.3!因此版本将更新到最新的父版本!
有人知道我怎样才能阻止这种行为吗?对我来说这不是我想要的行为,对吧?
父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>

模块\u 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\u a、module\u b等,version和父版本)外都是相同的

行为奇怪的奇怪模块是那些父版本与版本相同的模块(如“模块最小值”中所示,其中两者都设置为1.2)。在这些情况下,版本设置为与父pom的版本相同的版本。我还测试了一个父版本和版本设置为1.5的模块。同样的情况也发生了:版本从1.5升级到了1.3。

pkmbmrz7

pkmbmrz71#

我有一个多模块maven项目。所有模块都有相同的父模块。我想独立设置模块的版本。
给定问题中的模块定义,您还需要独立地为每个子级设置父级的版本。这与所有具有相同父级的模块相矛盾。
为了在子模块中实现父模块的独立版本,后者不应在子模块中引用父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/><parent> 标签。在这种情况下,当为子模块构建有效的pom时,maven总是从存储库中获取父定义。
当然,您甚至需要在构建任何子模块之前释放并部署父模块。
您可以查看google的auto project@github以查看所使用的类似结构。

相关问题