【发布时间】:2011-02-23 13:04:10
【问题描述】:
假设,我正在对有 7 个模块的大型项目进行完整构建,而在第 6 个模块上,构建失败是因为测试失败。有什么方法可以让我从失败的地方开始构建?
【问题讨论】:
假设,我正在对有 7 个模块的大型项目进行完整构建,而在第 6 个模块上,构建失败是因为测试失败。有什么方法可以让我从失败的地方开始构建?
【问题讨论】:
您可以使用 -rf 或 --resume-from 从第 6 个模块恢复构建:
-rf, --resume-from
从指定项目恢复反应器
详情请参阅Advanced Reactor Options。
【讨论】:
subproject/subsubproject作为参数
maven -rf <module name> clean install
mvn -rf :moduleName install。 (不确定为什么需要冒号,但似乎是 - 至少对于我的设置而言。)
install 目标时才有效,因为恢复构建可以获取已经从本地 Maven 存储库构建的工件以解决对它们的依赖关系。我发现运行install 构建是不好的做法,因为您最终会使用快照将本地存储库弄得一团糟,并且您最终可能会依赖于比您预期的更旧的快照。看起来只有 package 而不是 install 的构建,使用 -rf 不是一种选择:您必须完成整个构建。
这是一个例子
mvn clean install -rf :your-module
【讨论】:
您可以使用-rf 命令从您想要的任何模块恢复构建。
例如,如果您在 myproject-proxy 中构建失败,您可以使用以下命令:
mvn -rf myproject-proxy clean install
【讨论】:
查看 maven 摘要,您将看到已执行的模块以及 maven 停止的位置。 然后试试这个:
mvn clean install-Dmaven.test.skip=true -rf :yourModule
【讨论】:
根据来自Maarten Mulders 的“What's New in Maven 4”(2020 年 11 月),您将很快能够使用即将推出的 Maven 4.0.0(2021 年第一季度)
考虑这个示例项目结构:
将 --also-make 与 --resume-from 一起使用
Reactor 的第一个改进是错误修复。
以前,如果您的项目在客户端模块上构建失败,您会收到提示以使用--resume-from :client恢复构建。但如果你这样做了,构建会再次中断:这一次是因为 Maven 找不到公共模块。
您可能认为添加--also-make(或-am)可以解决这个问题,但事实并非如此。这个long-standing bug 已经不存在了。如果您将
--resume-from :client与--also-make结合使用,Reactor 将找到您项目中的所有模块并按照您的要求继续构建。
从最后一个故障点自动恢复
但您可能不会注意到。
--resume-from :client的作用在于,它让你想得更多。使用 Maven 4,您可以让您的生活更加轻松,并使用
--resume,或简称为-r。它将自动从上次失败的模块恢复构建。但还有更多!也许您正在使用parallel builds。 一个模块序列成功构建,而另一个模块序列的构建失败。
在这种情况下,使用-r将跳过在先前构建中成功的模块。这两个功能的结合可能会大大缩短您构建大型企业软件项目所需的时间!
【讨论】:
语法:mvn -rf 模块名 mavengoal 要么 mvn --resume-from modulename mavengoal
例如: mvn -rf 管理模块全新安装 要么 mvn --resume-from admin-module 全新安装
【讨论】:
-rf 不是--remove-from 的缩写。 --resume-from的缩写