当前位置: 首页 > 面试题库 >

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

甄鹏云
2023-03-14
问题内容

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

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

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

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


问题答案:

我发现了com.google.code.maven-replacer- plugin:replacer适用于我的情况的Maven插件。它接受一个xpath和一个正则表达式来定义要在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


 类似资料:
  • 问题内容: 我有一个可以使用a 或不使用a的插件(取决于我们正在构建的工件的版本:新版本没有pom。奇怪,我知道)。 我想让该插件在Jenkins中运行。 但是在创建Maven项目时,我必须设置一个pom(或者默认情况下,Jenkins假定给定的基本文件夹中有一个pom)。 问题 :是否可以将Jenkins配置为不使用pom? 问题答案: 根据我的评论,在这种情况下,您应该使用Jenkins自由式

  • 在将项目安装到(本地)maven存储库中时,我想用当前的实际值替换所有属性占位符,这有可能吗? 总之,我试图在maven中创建一个可定制的项目版本,以解决一些具有可传递依赖关系的问题。 这是我的最小化pom。xml: 在“mvn清理安装”之后,我希望在本地maven存储库中有“~/.m2/repository/com/foo/T/TEST/T-TEST.pom”以下内容: 因此,在将项目安装到ma

  • 我有一个Maven项目,它将一些测试文件下载到其构建目录中。这些文件应该可以用于servlet,我可以通过将完整路径硬编码为

  • 问题内容: 有没有一种方法可以将类型依赖项添加到我的POM并获取其所有模块? JavaMail是一个很好的例子。Maven Central Repo的父POM名为:com.sun.mail:all:1.5.0,模块包括:mail,mailapi,mailapijar,smtp,imap,gimap,pop3和dsn。 但是,“所有”人工制品只有一个文件: 是否可以将“所有”人工制品添加为对我的PO

  • 问题内容: 我正在尝试从ANT任务编写脚本。这个脚本做了一些svn-stuff,然后应该设置outputproperty : 我想使用此属性在jenkins的构建后步骤中通过电子邮件将其发送给某些收件人,但是我似乎无法在Jenkins中使用它。我从中收到的邮件仅作为内容。 不知道这是否有帮助,但是在我的ANT脚本的顶部,我用 我做过的另一种方法是通过将我的属性声明为并分别设置exec目标的输出属性

  • 是否有人知道从文件中设置作业属性(特别是构建触发器)的正确方法?(多分支管道作业中的声明性管道脚本)。 为了清晰起见,我需要为多分支项目中的底层作业设置特定的构建触发器。我可以在GUI中配置总体多分支项目的触发器。 尝试过这里列出的方法:Jenkins多分支管道和指定上游项目 詹金斯:在上游更改时触发多分支管道 如何使用Jenkins管道属性步骤? 从v0开始,我就听到这样的错误。8我应该使用选项