用 pom.xml 中的值替换占位符名称

Posted

技术标签:

【中文标题】用 pom.xml 中的值替换占位符名称【英文标题】:Replacing placeholder name with value in pom.xml 【发布时间】:2021-02-16 19:25:21 【问题描述】:

我正在处理多模块项目,我想在我的 pom.xml 中放置版本的占位符,以便我们的团队成员可以使用命令行构建自己的 war/jar,而无需在父 pom 和子 pom 中硬编码版本。目前的问题是占位符值未在 .m2 文件夹中更新。请帮我解决这个问题。

【问题讨论】:

构建应该由像 Jenkins 这样的 CI 解决方案而不是手动完成...... war/jar 版本对于识别您的开发的特定状态至关重要,这通常与您的开发相关,通过标签您的版本控制由您的 pom 文件中的版本表示?要处理版本,您应该深入研究:maven.apache.org/maven-ci-friendly.html 【参考方案1】:

为了更新 pom 文件中的占位符值,可以通过以下两个命令来完成

 mvn versions:set -DnewVersion="2.1.1"
 mvn versions:commit

完成后,您可以使用常用命令mvn packagemvn install 触发构建

【讨论】:

这行不通。它会产生不可消耗的 pom 文件...除此之外,hello 版本不是一个好的版本选择。 @Shivam Som,我也这样做了。但是在 .m2 文件夹中,当我们看到 pom 时,占位符没有更新为值 @khmarbaise 感谢您指出这一点。重命名版本。理想情况下,是的,版本控制应该通过发布管道处理,它应该是一个自动化过程,可以通过 Azure DevOps、Jenkins 等工具完成。 @Dev 根据您的要求更新了答案。这也会更新占位符 @ShivamSom 感谢更新,但实际上我们的 pom.xml 中有占位符。主版本我们将从属性标签中获取它,我们将通过 maven 命令 ex 发送固定版本。 serv-parent$app.version$subversionpom【参考方案2】:

您可以将属性放在***项目的 pom.xml 中:

<project>
  <!-- other stuff ... -->
  <properties>
    <downloadSources>true</downloadSources>
    <downloadJavadocs>true</downloadJavadocs>
    <jdo.version>3.0</jdo.version>
    <datanucleus.version>2.2.1</datanucleus.version>
  </properties>
  ...
</project>

然后在您的模块 pom.xml 中,您可以使用将替换为实际值的变量引用。例如:

<dependency>
  <groupId>org.datanucleus</groupId>
  <artifactId>datanucleus-core</artifactId>
  <version>$datanucleus.version</version>
</dependency>

【讨论】:

以上是关于用 pom.xml 中的值替换占位符名称的主要内容,如果未能解决你的问题,请参考以下文章

用其他数组中的值替换数组中的占位符

用映射字典的值替换嵌套字典中的占位符

Java实现JSON{参数}占位符名称替换指定的多个变量值

替换 java 属性中占位符中的属性值 - IntelliJ 2017.2

如何将 R 会话中的值替换为 SQL 绑定变量占位符?

用点击的 span 标签的 innerHTML 替换占位符值