繁体   English   中英

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

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

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

我的问题是在 nexus 存储库的子模块的 pom.xml 中有${global.version}变量。 通过从父项目获取版本号 (GOLD), commons-GOLD.jar成功地发生在 nexus 中。 但是,它是连接点${global.version}而不是 GOLD 中的 pom.xml 文件,当我添加 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

或者有没有办法如何忽略父pom进行依赖解析?

黄金神器就在那里。

工件创建

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

pom.xml 内容

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

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

我猜你想要这个插件和用法,例如:

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

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

这里的问题很简单,就是没有正确使用flatten-maven-plugin

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

  • ${修订}
  • ${sha1}
  • ${变更列表}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM