【问题标题】:Can we start the maven build from the point where it failed我们可以从失败的地方开始 Maven 构建吗
【发布时间】:2011-02-23 13:04:10
【问题描述】:

假设,我正在对有 7 个模块的大型项目进行完整构建,而在第 6 个模块上,构建失败是因为测试失败。有什么方法可以让我从失败的地方开始构建?

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    您可以使用 -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 不是一种选择:您必须完成整个构建。
    【解决方案2】:

    这是一个例子

    mvn clean install -rf :your-module
    

    【讨论】:

      【解决方案3】:

      您可以使用-rf 命令从您想要的任何模块恢复构建。 例如,如果您在 myproject-proxy 中构建失败,您可以使用以下命令:

      mvn -rf myproject-proxy clean install
      

      【讨论】:

      • 我需要输入一个冒号才能使其正常工作,例如-rf :yourModule 查看其他答案。
      【解决方案4】:

      查看 maven 摘要,您将看到已执行的模块以及 maven 停止的位置。 然后试试这个:

      mvn clean install-Dmaven.test.skip=true -rf :yourModule
      

      【讨论】:

        【解决方案5】:

        根据来自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 将跳过在先前构建中成功的模块。

        这两个功能的结合可能会大大缩短您构建大型企业软件项目所需的时间!

        【讨论】:

        • 你好@VonC,我问的是题外话。我想知道你们维护哪些软件?我在您的个人资料页面上看到了 jira、git、maven 等,您是贡献者吗?你怎么对 git 了解这么多?你建造它们吗?我很好奇...
        • @nikhilswami 我维护了一些我在工作中使用的工具 (github.com/VonC)。早在 2009 年,我就通过回答 Stack Overflow 上的问题学习了 Git。如今,我积极支持使用 Git 的开发团队,所以我也继续以这种方式学习。
        【解决方案6】:

        语法:mvn -rf 模块名 mavengoal 要么 mvn --resume-from modulename mavengoal

        例如: mvn -rf 管理模块全新安装 要么 mvn --resume-from admin-module 全新安装

        【讨论】:

        • -rf 不是--remove-from 的缩写。 --resume-from的缩写
        猜你喜欢
        • 2011-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多