当前位置: 首页 > 知识库问答 >
问题:

如何使用版本maven插件设置子模块版本?

郏兴贤
2023-03-14

我有一个多模块项目,所有模块都有一个公共的父pom和一个聚合器/构建pom。我试图使用maven版本插件来更新/设置我所有模块的版本,但它一直跳过子模块。

项目布局:-通用/pom.xml(build pom)-通用/Superpom/pom.xml(父pom)-模块1/pom.xml(模块1 pom)-模块2/pom.xml(模块2 pom)

普通/聚甲醛。xml:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.bic</groupId>
    <artifactId>builder</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Builder</name>

    <modules>
        <module>../module1</module>

        <!-- POM Component Versionning -->
        <module>../module2</module>
    </modules>
<build>
    <plugins>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.1</version>
        </plugin>

    </plugins>
</build>
</project>

我尝试将插件添加到构建pom(common/pom.xml),然后调用:

mvn versions:set -DnewVersion=999999

Maven列出了它在子模块中找到的所有道具,因此我知道它正在正确解析它们:

Props: {project.version=50, project.parent.version=1.0-SNAPSHOT, project.parent.groupId=com.bic, project.artifactId=module1, project.groupId=com.bic, project.parent.artifactId=common}
Props: {project.version=50, project.parent.version=1.0-SNAPSHOT, project.parent.groupId=com.bic, project.artifactId=module2, project.groupId=com.bic, project.parent.artifactId=common}

但它实际上并没有更新任何模块POM的版本,这正是我想要做的。

[INFO] Reactor Summary:
[INFO]
[INFO] Module1 ........................................ SKIPPED
[INFO] Module2 ........................................ SKIPPED
[INFO] Builder ........................................ SUCCESS [  2.037 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.975 s
[INFO] Finished at: 2015-01-26T11:48:11-05:00
[INFO] Final Memory: 24M/44M
[INFO] ------------------------------------------------------------------------

而且,更新子模块目标不允许我明确地为子模块设置版本号。

我使用的插件有误吗?

共有3个答案

呼延英奕
2023-03-14

这有点晚了,但我刚刚找到了答案。您需要直接在父项目上运行版本:设置目标。它会注意扫描附近的聚合器POM(可能只查找一个目录,但我不肯定),并将更新父、聚合器和所有子模块,正如您所期望的那样。

根POM是聚合器,将父级、模块1和模块2列为模块:

DANIJOH2-M-V0MA:test danijoh2$ ls
module1 module2 parent  pom.xml

根聚合器POM、module1和module2都引用父级/POM。xml作为其父POM。移动到父级并运行版本:设置目标:

DANIJOH2-M-V0MA:test danijoh2$ cd parent
DANIJOH2-M-V0MA:parent danijoh2$ ls
pom.xml

DANIJOH2-M-V0MA:parent danijoh2$ mvn org.codehaus.mojo:versions-maven-plugin:2.1:set -DnewVersion=1.0.0 -DgenerateBackupPoms=false
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building parent 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.1:set (default-cli) @ parent ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /Users/danijoh2/Desktop/test
[INFO] Processing com.cisco.dan.test:parent
[INFO]     Updating project com.cisco.dan.test:parent
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
[INFO] 
[INFO] Processing com.cisco.dan.test:aggregator
[INFO]     Updating parent com.cisco.dan.test:parent
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
[INFO]     Updating project com.cisco.dan.test:aggregator
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
[INFO] 
[INFO] Processing com.cisco.dan.test:module1
[INFO]     Updating parent com.cisco.dan.test:parent
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
[INFO]     Updating project com.cisco.dan.test:module1
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
[INFO] 
[INFO] Processing com.cisco.dan.test:module2
[INFO]     Updating parent com.cisco.dan.test:parent
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
[INFO]     Updating project com.cisco.dan.test:module2
[INFO]         from version 1.0.0-SNAPSHOT to 1.0.0
杭曦
2023-03-14

插件版本maven plugin的2.5版中引入了一个解决方案

mvn versions:set -DnewVersion=1.6-SNAPSHOT -DprocessAllModules=true

或者如果像我一样,你需要强制版本:

mvn org.codehaus.mojo:versions-maven-plugin:2.5:set -DnewVersion=1.6-SNAPSHOT -DprocessAllModules=true
狄天逸
2023-03-14

无法直接使用versions maven插件来完成,所以我只能手动完成。

find . -name "pom.xml" -exec mvn versions:set -DnewVersion=1.0.3-SNAPSHOT -f {} \;

这最终找到了我的子模块的所有POM,并更新了每个模块中的版本号。绝对比在父级上使用插件慢,因为它是设计用来完成的,但是功能性很强。

 类似资料:
  • 我有一个大的多模块maven项目(几十个模块,4个嵌套级别)。 每个模块都有自己的语义版本(可以是或不是)。 我想找到一种方法,用一个命令或脚本自动增加每个模块的主要版本,以避免每个模块中的更改。 所以我举个例子 在颠簸之后我想要 我知道Maven Release Plugin和Maven Plugin版本,但我不知道如何让它们自动与主版本碰撞。 你能帮我解决这个问题吗?

  • 我正在阅读这些文档,仍然不知道Maven是如何决定下载哪些版本的插件的。 例如,考虑以下简单场景: 一个空的本地存储库 默认settings.xml 运行一个简单的maven命令。例如,用于,如Maven在5分钟文档中所述。 运行命令后,Maven做的第一件事就是下载一堆插件。 Maven正在下载的一些插件包括: maven-clean-plugin-2.4.1 maven-install-plu

  • 我正在尝试使用Maven版本插件将所有子POM升级到父版本,并在父POM中执行所有子模块的构建。Pom文件如下所示 现在,如果我使用Eclipse中的命令在基本POM上运行Maven构建 子模块正在正确构建,但是如果我将base pom版本更新到2.0并使用版本插件命令 版本正在更新,但子模块尚未构建。只有基本pom得到构建。 我是否必须明确指定在某个阶段构建子模块?我错过了什么?。

  • 我正在阅读有关maven versions插件的内容:http://mojohaus.org/versions-maven-plugin/examples/advanced-dependency-versions.html 对于这个目标:“versions:use-next-releases在pom中搜索所有非快照版本,这些版本已经是一个较新的版本,并用下一个版本替换它们。”

  • 所有POM都有作为它们的版本,也在dependencies标签下。它通过上传到Nexus repo。 我们最近开始做。因此,所有20个父POM现在都是和版本,因为它们都位于nexus中。所有标记现在都指向 开发人员不想指向发布版本。他们需要来自同行的edge开发版本,不管它是否不稳定。 SCM只希望指向版本,因为他必须每周执行一次,但由于指向快照版本而失败。 现在我知道了版本插件,但问题是,我应该

  • 使用 use-lates-release 用于较新的版本(所有非快照),并用最新的版本替换POM的版本。我用 [anyVersionNumber] 在pom.xml中添加了依赖项(当前项目所依赖的)。 当我运行“MVN clean Package”时,生成失败,错误消息是无法解析项目的依赖项 :jar:0.1:无法找到工件 :jar:[anyVerionNumber] versions-maven