如何从后续阶段恢复失败的Maven release:prepare(跳过失败阶段)
问题描述
执行mvn release:prepare时,在第11阶段scm-commit-release失败,原因是RTC(Jazz)SCM工作区存在问题,错误提示无法确定变更集所属组件。已手动完成等效的提交操作,尝试用-rf release:prepare恢复构建,但Maven仍从失败的第11阶段开始并再次失败。希望让Maven从第12阶段scm-tag或第13阶段rewrite-poms-for-development继续执行,现询问:
- 这种恢复方式是否可行?
- Maven如何确定从特定阶段恢复而非更早阶段?是否可修改恢复阶段?
错误日志
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:3.0.0-M1:prepare (default-cli) on project driver-component-root-pom: Unable to commit files [ERROR] Provider message: [ERROR] Error code for Jazz SCM create changeset command - 9 [ERROR] Command output: [ERROR] Problem running 'create changeset': [ERROR] Cannot determine which component to create change set in. Specify a component.
恢复时日志
[INFO] --- maven-release-plugin:3.0.0-M1:prepare (default-cli) @ driver-component-root-pom ---^ [INFO] phase verify-release-configuration [INFO] starting prepare goal, composed of 17 phases: check-poms, scm-check-modifications, check-dependency-snapshots, create-backup-poms, map-release-versions, input-variables, map-development-versions, rewrite-poms-for-release, generate-release-poms, run-preparation-goals, scm-commit-release, scm-tag, rewrite-poms-for-development, remove-release-poms, run-completion-goals, scm-commit-development, end-release [INFO] Resuming release from phase 'scm-commit-release' [INFO] [prepare] 11/17 scm-commit-release [INFO] Checking in modified POMs... . . . (fails exactly the same way again)
解决方案与说明
1. 跳过scm-commit-release阶段继续执行的可行性
可行,但需要手动干预Maven release插件的状态文件。你已经手动完成了提交,只要确认手动提交的内容和插件要提交的完全一致(即修改后的release版本POM文件),跳过该阶段不会破坏release流程的完整性,后续的scm-tag和rewrite-poms-for-development阶段可以正常执行。
2. Maven确定恢复阶段的机制及修改方法
- 恢复阶段的判定逻辑:Maven release插件执行
prepare时,会在项目根目录生成release.properties文件,里面记录了当前release的状态,包括已完成的阶段、版本信息等。插件重启时会读取这个文件,找到最后标记为未完成的阶段,从该阶段开始执行。 - 修改恢复阶段的方法:
- 打开项目根目录下的
release.properties文件; - 找到记录当前阶段的字段(通常是
currentPhase或与release.prepare.goal相关的配置); - 将字段值修改为你想启动的目标阶段,比如要从
scm-tag开始,就把对应值改为scm-tag; - 保存文件后,重新执行
mvn release:prepare -rf release:prepare,插件就会从指定阶段启动。
- 打开项目根目录下的
注意:修改前必须确认scm-commit-release的操作已通过手动方式完成,且状态与插件执行完成后的状态完全一致,否则后续阶段可能出现版本不匹配或SCM状态不一致的问题。
内容的提问来源于stack exchange,提问作者devopsmikey
相关产品推荐
相关产品推荐

