writeMavenPom 不是在 pom 中写入

writeMavenPom is not writing in pom

根据 https://www.cloudbees.com/blog/new-way-do-continuous-delivery-maven-and-jenkins-pipeline 写入带有 pom.version.replace 的 pom 应该是什么样的?我假设 pom.version.replace 不会修改任何内容,但如何将更改保存在 pom 中? 我目前正在使用更新失败的这个:

   def pom = readMavenPom file: 'pom.xml'
   def version = pom.version.replace("-SNAPSHOT", "")
   writeMavenPom model: pom

我必须添加以下指令来保存数据:

pom.version = pom.version.replace("-SNAPSHOT", "")

尽管有更好的选择

您需要更改 pom 对象。 replace 方法不会修改字符串,而是 return 一个新字符串。由于您已经存储了更改后的版本,因此您只需覆盖 pom.version。由 readMavenPom 编辑的对象 return 是一个 Model。此 class 有一个 setVersion 方法,可用于在将带有 writeMavenPom 的对象写入文件之前更改版本。

所以它应该是这样的:

def pom = readMavenPom file: 'pom.xml'
def version = pom.version.replace("-SNAPSHOT", "")
pom.version = version
writeMavenPom model: pom

受到 link 的启发,我刚刚粘贴为对另一个答案的评论,您也可以研究一下用于持续交付的新 Maven 功能。即,您现在可以使用属性(从 Maven 3.2.1 开始)作为版本:

<version>${releaseVersion}</version>
...
<properties>
  <releaseVersion>0-SNAPSHOT</releaseVersion> <!-- sane default -->
</properties>

因此您可以在构建期间将所需版本作为 -D 参数传递:

mvn clean package -DreleaseVersion=1.2.3-45

详细讨论请看这里:https://axelfontaine.com/blog/dead-burried.html

我推荐你使用maven versions plugin

您可以使用此命令删除 -SNAPSHOT:

mvn versions:set -DremoveSnapshot