【问题标题】:Have sbt fail when project loading fails (rather than awaiting user input)?当项目加载失败(而不是等待用户输入)时,sbt 是否失败?
【发布时间】:2014-02-24 09:20:54
【问题描述】:

我正在配置我们的 CI 基础架构,当项目加载失败时,sbt 会询问该怎么做:

Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

这会挂起等待进程返回的构建。

有没有办法告诉 sbt 停止而不询问加载失败时该怎么办?

【问题讨论】:

    标签: continuous-integration sbt


    【解决方案1】:

    恕我直言,修补 sbt 启动器,因此 sbt 可执行文件仅在必须执行一次时才可接受,即在单个 CI 盒或您的 devenv 上。

    作为一种技巧,您可以在 sbt 命令上关闭标准输入:

    sbt < /dev/null

    这样做不会启用交互模式,导致它在出现错误时退出。

    请参阅here 了解类似的问题。

    【讨论】:

      【解决方案2】:

      通过 JVM 参数禁用底层 JLine 终端类型

      -Djline.terminal=off
      

      SBT 将无法提示您,直接退出。

      【讨论】:

        【解决方案3】:

        使用 -batch 选项调用 SBT。它仍然会打印提示,但实际上并不等待回复,而是会以非 0 状态退出。

        【讨论】:

        • 它不起作用:C:\Users\Jerzy\Workspaces\GitHub\genesis>sbt compile -batch [info] Loading global plugins from C:\Users\Jerzy\.sbt\0.13\plugins [info] Loading project definition from C:\Users\Jerzy\Workspaces\GitHub\genesis\project C:\Users\Jerzy\Workspaces\GitHub\genesis\build.sbt:11: error: not found: value tru exportJars := tru ^ [error] Type error in expression Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
        • 我在我的 Mac 上对其进行了测试,它符合我的描述。对于 Windows,谁知道呢?
        • 好吧,也许 sbt runner for Windows 很差。我将在 Linux(我们的 CI)上对其进行测试,如果它在那里工作,那对我来说没问题 :)
        • 它也不适用于 Mac OS。我直接使用sbt-launch.jar 和一个设置SBT_OPTS 并运行jar 的简单脚本。
        • 确保您的脚本将 JVM 的退出状态作为脚本本身的退出状态进行传播。正如我所说,它 WFM...
        猜你喜欢
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        相关资源
        最近更新 更多