如何找出SBT说“javac返回非零退出代码”时发生了什么?

时间:2015-06-30 07:57:25

标签: sbt

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

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

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

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

我正在使用SBT 0.13.8

感谢。 阿什利

3 个答案:

答案 0 :(得分:1)

设置了javaHome设置后,sbt会通过派生该进程来调用javac,并尝试从输出中从屏幕上抓取错误消息,这很容易出错。 sbt 1.2.0-RC3对其进行了一些改进,但这是一个hack。

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

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

  

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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