如何替换 Maven 子模块 pom.xml 文件中的版本号?

How to replace version number in Maven submodule pom.xml files?

我有一个多模块 maven 项目,子模块从父项目获取版本号 属性 并且工件正在创建得很好。

我的问题是在子模块的 pom.xml 中有 ${global.version} 变量在 nexus 仓库中。 commons-GOLD.jar 通过从父项目获取版本号 (GOLD) 成功地在 nexus 中发生。但是,它是连接点 ${global.version} 中的 pom.xml 文件而不是 GOLD,当我添加 commons-gold 作为依赖项时,mvn 尝试拉取 cenatral/myProj.parent/$%7Bglobal.version%7D/myProj.parent-$%7Bglobal.version%7D.pom

MyProject 父项目pom.xml

<version>${global.version}</version>
<packaging>pom</packaging>
<modules>
    <module>commons</module>
    <module>module2</module>
and so on

<properties>
    <!-- Unique entry point for version number management -->
    <global.version>GOLD</global.version>
</properties>

公共模块pom.xml

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.hmg</groupId>
    <artifactId>myproj.parent</artifactId>
    <version>${global.version}</version>
</parent>

我想将上面的 ${global.version} 替换为来自父 pom.xml 的 属性。即使有效的 pom 具有正确的值,nexus 具有原始 pom,这会导致 maven 命令在解析依赖项时失败。

尝试覆盖它,但这没有用。

mvn '-Dglobal.version=GOLD' dependency:tree

或者有什么方法可以How to ignore parent pom for dependency resolution?

GOLD神器就在那里。

POM.xml 包含变量,这会导致依赖项解析问题。

如果我在另一个版本为 1.0.0 或 GOLD 的项目中使用 commons 作为依赖项,无论它寻找 ${version} 的版本是因为它在 nexus 中的 pom。

XDrive:> 无法在 com.xyz:common:jar:1.0.0 收集依赖项:无法读取 com.xyz:common 的工件描述符:jar:1.0.0: 找不到 com.xyz:myProj.parent:pom:${revision}http://10.80.100.155:8085/repository/myProj-group/ 中缓存在本地存储库中,在中央更新间隔结束或强制更新之前不会重新尝试解析 -> [帮助 1]

我猜你想要this plugin和用法,例如:

mvn versions:set -DgenerateBackupPoms=false -DnewVersion=1.2.3

这将更新所有模块中的 所有 版本。

这里的问题只是 flatten-maven-plugin 的用法不正确。

此外,您只能使用与此设置相关的以下属性:

  • ${修订版}
  • ${sha1}
  • ${更改列表}

除此之外,您可以在不定义任何 属性 的情况下使用 versions-maven-plugin。除此之外,您可以使用增加版本号的发布插件,通常不需要定义 属性 (仅在特定情况下