如何在Maven / Jenkins作业中替换POM中的属性?

时间:2015-06-08 09:27:13

标签: maven jenkins

我有一个包含客户端和服务器组件的项目。两者都有自己的Maven多模块构建项目。

必须在各种前端模块中引用正确的服务器版本。为此,我在我的客户父POM中设置了一个属性,如下所示:

<properties>
  <server.version>1.2.3</server.version>
</properties>

现在,我想在Jenkins构建作业期间/之后更新POM中的版本号 (即,不只是从命令行注入-D ...)。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

你检查过maven版本的插件吗? (Tbe网站已关闭,但插件页面仍可在google cache

中使用
mvn -DnewVersion=<version> versions:set

答案 1 :(得分:0)

我找到了com.google.code.maven-replacer-plugin:replacer Maven插件,它适用于我的情况。它接受xpath和regex来定义XML文件中要替换的内容。

示例插件配置:

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <configuration>
        <file>${project.basedir}/pom.xml</file>
        <xpath>/project/properties/server.version/text()</xpath>
        <token>^.*$</token>
        <value>${newServerVersion}</value>
    </configuration>
</plugin>

可以为每个受影响的maven模块运行插件:

mvn --non-recursive replacer:replace -DnewServerVersion=xxxx

答案 2 :(得分:0)

在itembase中我们使用Jenkins Pipeline Plugin。它附带了一些有用的内置函数,例如readMavenPomwriteMavenPom。因此,在您的构建管道中,您可以执行以下操作:

def pom = readMavenPom file: 'pom.xml'
//Do some manipulation
writeMavenPom model: pom