Maven并行构建中使用rf(resume from)参数时的执行逻辑是什么?
Maven 使用
-rf 从并行构建失败模块恢复的执行逻辑 首先明确核心前提:-T1C 这类并行构建参数仅影响运行时的模块调度策略,Maven 的反应堆构建规则、成功/失败状态标记逻辑和串行构建完全一致,-rf(--resume-from)的执行逻辑和前次构建是否并行无关,具体执行步骤如下:
- 第一步:参数校验
首先校验你通过-rf指定的模块坐标/模块名是否存在于当前项目的反应堆列表中,如果不存在会直接抛出参数错误并终止执行。 - 第二步:加载前次构建状态缓存
Maven 每次构建时会在项目根目录的.maven文件夹下生成本次构建的状态缓存,记录每个模块的构建结果(成功/失败/跳过)。恢复构建时会优先读取该缓存,跳过所有前次构建已经标记为构建成功、且在反应堆排序中位于指定恢复模块之前的模块。额外说明:
-T1C并行构建遵循严格的依赖拓扑调度规则,仅会启动所有依赖都已完成构建的模块执行任务。因此某模块构建失败时,它的所有上游依赖模块必然已经构建成功,恢复构建时默认不会重新执行这些依赖模块的构建任务,除非你主动追加-am(--also-make)参数。 - 第三步:执行待构建模块的任务
从你指定的失败模块开始,按反应堆排序执行该模块、以及所有排在该模块之后的模块的对应Maven目标(如clean、install等)。如果本次执行命令仍然携带-T1C并行参数,剩余待构建模块依然会遵循并行调度规则:在满足依赖拓扑的前提下,按CPU核心数并行调度无依赖关系的模块执行。 - 第四步:更新构建状态缓存
本次构建过程中每个模块的执行结果会同步更新到构建状态缓存中,后续如果再次出现构建失败,仍然可以使用-rf参数从新的失败节点恢复。
内容的提问来源于stack exchange,提问作者Graeme Moss
相关产品推荐
相关产品推荐

