15

sbt发出任何命令( 、 或任何其他命令)时出现神秘错误compile而失败assemblyclean

$ sbt --version                                                                                                                                                          
error: error while loading String, class file '/modules/java.base/java/lang/String.class' is broken
(class java.lang.NullPointerException/null)

我在运行 macOS 的机器上,并sbt通过homebrew安装。我已尝试升级到sbt( 1.3.10 ) 的最新版本,但错误仍然存​​在。

4

4 回答 4

18

该问题记录在SBT 下载页面上。

Homebrew 维护者已经向 JDK 13 添加了一个依赖项,因为他们想要使用更多的 brew 依赖项 ( brew#50649 )。即使 PATH 上可用的 java 是 JDK 8 或 11,这也会导致 sbt 使用 JDK 13。要防止 sbt 在 JDK 13 上运行,请安装jEnv或切换到使用SDKMAN

我能够通过使用 JDK 8 来解决问题jEnv

于 2020-04-17T13:22:03.733 回答
13

由于 sbt 将JDK 8 和 11记录为兼容版本

我们推荐 AdoptOpenJDK JDK 8 或 AdoptOpenJDK JDK 11

尝试通过-java-home设置来控制 sbt 使用哪个 JDK,该设置可以通过sbtopts运行配置在系统范围内进行配置

/usr/local/etc/sbtopts

或通过每个项目的基础


<project-root>/.sbtopts

例如,要在当前项目中配置 sbt 使用的 JDK,尝试在.sbtopts

-java-home /Users/picard/.sdkman/candidates/java/current
于 2020-04-17T14:08:42.727 回答
6

这就是解决我在 Mac 上的问题的原因。

brew uninstall sbt

安装 sdkman

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

通过 sdk 安装 sbt

sdk install sbt
于 2020-11-18T05:54:26.630 回答
5

我最近有同样的问题。对我有用的是安装SDKMANhttps://sdkman.io/

$ curl -s "https://get.sdkman.io" | bash
...
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
...

安装后,我想看看我可以安装哪些版本的 Java。所以我简单地运行这个命令来列出所有可用的 Java 版本

sdk list java

选择您要安装的版本(建议安装 8 或 11,如上所述),然后简单地运行带有从列表中指定您的版本的标识符的命令

sdk install java 11.0.3.hs-adpt

安装后,它在我的系统上将 Java 11 设置为默认值。然后我再次运行该sbt命令并且它起作用了。

于 2020-10-22T13:53:02.720 回答