【问题标题】:How to find out what happened when SBT says "javac returned nonzero exit code"?当 SBT 说“javac 返回非零退出代码”时,如何找出发生了什么?
【发布时间】:2015-09-16 22:03:14
【问题描述】:

我正在尝试将我们的项目迁移到 Java 8。当我运行编译时,我得到了这个:

[error] (MyProject/compile:compileIncremental) javac returned nonzero exit code

Java 7 不会发生这种情况。我怀疑这与我们使用 Lombok 有关。

有没有办法从 javac 获取实际输出?我试过“last”和“lastgrep”,但我只看到 SBT 日志。

我正在使用 SBT 0.13.8

谢谢。 阿什利

【问题讨论】:

  • 您应该将 SBT 的输出级别设置为更详细,参见。 stackoverflow.com/questions/24118856/…
  • 谢谢。不幸的是,在这种情况下这似乎没有帮助。我可以看到 SBT 认为已更改的文件,但没有 javac 的输出:'[debug] Attempting to call com.sun.tools.javac.api.JavacTool@7d3bdc68 directly...''[warn] bootstrap class path not set结合 -source 1.6' '[error] (MyProject/compile:compileIncremental) javac returned nonzero exit code' '[error] Total time: 4 s, completed 30-Jun-2015 09:06:43'
  • 对于和我遇到同样问题的人来说,这是由于 Lombok 和 Java 8 的“val”特性。删除它允许 javac 完成。问题仍然存在,我能否让 SBT 给我更多信息,而不是让我通过反复试验找到它?
  • 我在从 sbt 0.13.7 升级到 0.13.8 时看到了这一点。不幸的是,我不知道解决方案。
  • 我已提交 github.com/sbt/sbt/issues/2256 向 SBT 作者报告。

标签: sbt


【解决方案1】:

当设置javaHome 设置时,sbt 通过分叉进程调用javac,并尝试从输出中截取错误消息,这很容易出错。 sbt 1.2.0-RC3 对其进行了一些改进,但它是一个 hack。

避免这种情况的一种方法是确保将javaHome 设置设置为None。在 2015 年左右,sbt-extras 过去常常从 JAVA_HOME 环境变量中悄悄地设置 javaHome,但我认为自 2016 年以来在 https://github.com/paulp/sbt-extras/pull/160 中已经放弃了。由于这个问题是在 2015 年 6 月提出的,也许这就是当时的问题。如果您使用的是 sbt-extras,请更新到最新版本。

这可能会得到 Parag 的answer/observation 的进一步支持:

当我删除 .bash_profile 中的 JAVA_HOME 变量然后重新启动终端时,错误消息在我的 Mac 上消失了。

如果您在使用 sbt 1.x 时继续看到此问题,请报告 https://github.com/sbt/zinc/issues/520

【讨论】:

    【解决方案2】:

    我安装了 SBT 0.13.9、RHEL 和 OpenJDK1.8 并且遇到了同样的错误(没有进一步的堆栈跟踪),并且切换到 Oracle 的 JDK 修复了它。 javac-configuration 可能有一些问题,但没能用 OpenJDK 快速修复它。不过可能不是最好的解决方案。

    【讨论】:

      【解决方案3】:

      当我删除 .bash_profile 中的 JAVA_HOME 变量然后重新启动终端时,错误消息在我的 Mac 上消失了。

      【讨论】:

        猜你喜欢
        • 2016-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 2019-02-25
        • 2021-06-29
        • 2019-04-28
        • 2018-12-03
        相关资源
        最近更新 更多