Maven更新版本目标在Jenkins中构建旧版本

时间:2015-05-20 19:49:23

标签: maven jenkins pom.xml versions-maven-plugin

我有一个Jenkins / maven构建,我们需要能够生成具有任意版本号的发布工件。版本号作为参数传递给构建作业。我使用versions:set将版本从pom.xml中的版本更新为$ VERSION参数。运行构建时,maven似乎确实更新了pom.xml工作副本中的版本,但是它使用旧版本号构建工件

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <name>someservice</name>
    <groupId>com.domain.group</groupId>
    <artifactId>someservice</artifactId>
    <version>1.0.0-SNAPSHOT</version>

在Jenkins作业中调用顶级maven目标:

-V
-B
-e
-U
clean
versions:set
-DnewVersion=${VERSION}
package
deploy
-Dmaven.test.skip=true

我的构建输出看起来像这样($ VERSION为0.1.2)

[INFO] ------------------------------------------------------------------------
[INFO] Building someservice 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- versions-maven-plugin:2.2:set (default-cli) @ someservice ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /svn/group/someservice/trunk
[INFO] Processing change of com.domain.group:someservice:1.0.0-SNAPSHOT -> 0.1.2
[INFO] Processing com.domain.group:someservice
[INFO]     Updating project com.domain.group:someservice
[INFO]         from version 1.0.0-SNAPSHOT to 0.1.2
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.147s
[INFO] Finished at: Wed May 20 11:40:46 PDT 2015
[INFO] Final Memory: 10M/180M
[INFO] ------------------------------------------------------------------------

我注意到虽然初始运行将使用旧版本构建,但如果未恢复工作目录,则后续运行将使用更新后的pom.xml中的新版本正确构建。如何在构建工件之前使用新版更新pom文件?

约束:

  • 虽然我们可能对pom.xml进行了更改,但它并不是我们直接控制的,并且是一种不太实际的解决方案。在理想的世界中,pom已经使用正确的版本进行更新,我们根本不会这样做。
  • 我知道我可以在maven构建之前添加一个shell步骤,并在pom.xml或类似的东西上进行sed替换。这确实有效,但它很丑陋并且不会用更复杂的poms进行扩展。非常喜欢本地maven解决方案。
  • 我已经独立于jenkins(即mvn versions:set -DnewVersion=0.1.2)对此进行了测试,且行为相同

1 个答案:

答案 0 :(得分:1)

使用当前maven版本无法实现的目标,如版本-maven-plugin的Usage section中所述:

  

Maven 2.0,2.1,2.2和3.0目前不支持在一次Maven调用中重新读取pom.xml的修改。

如何在此处添加其他构建步骤?