如何配置Maven buildnumber-plugin仅在特定构建中递增构建号?
解决maven-buildnumber-plugin仅在Jenkins构建时递增版本号的方案
要实现只让Jenkins构建触发版本号递增、本地调试不增长的需求,核心思路是利用Jenkins构建时自动注入的环境变量,结合Maven的配置特性来控制插件的更新开关。下面给你两种实用的解决方案:
方案一:用Maven Profile区分构建环境
通过定义两个Profile,分别对应Jenkins构建和本地构建,自动根据环境激活对应的配置:
<profiles> <!-- Jenkins构建专属Profile --> <profile> <id>jenkins-build</id> <!-- 检测到Jenkins自带的BUILD_NUMBER变量时自动激活 --> <activation> <property> <name>env.BUILD_NUMBER</name> </property> </activation> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> <configuration> <doCheck>true</doCheck> <!-- Jenkins构建时开启版本号更新 --> <doUpdate>true</doUpdate> <format>{0,number}</format> <items> <item>buildNumber</item> </items> </configuration> </plugin> </plugins> </build> </profile> <!-- 本地构建默认Profile --> <profile> <id>local-build</id> <!-- 默认激活,除非Jenkins环境变量存在 --> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> <configuration> <doCheck>true</doCheck> <!-- 本地构建时关闭版本号更新,避免增长 --> <doUpdate>false</doUpdate> <format>{0,number}</format> <items> <item>buildNumber</item> </items> </configuration> </plugin> </plugins> </build> </profile> </profiles>
逻辑说明
- 本地构建:默认激活
local-build,doUpdate=false,插件只会读取当前构建号,不会修改版本库中的编号,完全不影响本地调试。 - Jenkins构建:Jenkins会自动设置
BUILD_NUMBER环境变量,此时jenkins-build自动激活,doUpdate=true,正常执行版本号递增和更新操作。
方案二:直接在插件配置中用条件判断
如果觉得Profile太繁琐,可以直接用Maven的属性默认值语法,一行配置搞定:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> <configuration> <doCheck>true</doCheck> <!-- 只有Jenkins环境下(存在BUILD_NUMBER)才开启更新,本地默认false --> <doUpdate>${env.BUILD_NUMBER:true}</doUpdate> <format>{0,number}</format> <items> <item>buildNumber</item> </items> </configuration> </plugin>
逻辑说明
利用Maven的${属性名:默认值}语法:当Jenkins环境中存在BUILD_NUMBER时,doUpdate会被解析为true;本地构建时没有这个变量,自动使用默认值false,实现环境区分。
额外注意事项
- 确保Jenkins的Maven构建任务允许环境变量传递到Maven进程(默认是开启的,特殊配置需要检查)。
- 如果你的Jenkins没有自动生成
BUILD_NUMBER,也可以手动在构建任务中添加自定义环境变量(比如IS_JENKINS_BUILD=true),然后把配置中的env.BUILD_NUMBER换成这个自定义变量即可。
内容的提问来源于stack exchange,提问作者Xtroce
相关产品推荐
相关产品推荐

