SBT 因“String.class 已损坏”而失败

suj*_*1th 11 scala sbt

sbt失败,神秘的错误上发出任何命令(compileassemblyclean或任何其他)。

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

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

suj*_*1th 15

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

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

我能够通过使用 JDK 8 通过jEnv.

  • 对我来说不起作用,但是关于在 sbt 配置中更改 JDK 的其他响应解决了我的情况的问题。 (4认同)

Mar*_*lic 11

由于SBT文件JDK 8和11兼容版本

我们推荐AdoptOpenJDK JDK 8 或AdoptOpenJDK JDK 11

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

/usr/local/etc/sbtopts
Run Code Online (Sandbox Code Playgroud)

或每个项目的基础通过


<project-root>/.sbtopts
Run Code Online (Sandbox Code Playgroud)

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

-java-home /Users/picard/.sdkman/candidates/java/current
Run Code Online (Sandbox Code Playgroud)


Man*_*tra 8

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

$ curl -s "https://get.sdkman.io" | bash
...
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
...
Run Code Online (Sandbox Code Playgroud)

安装后,我想看看可以安装哪些版本的 Java。所以我只需运行此命令即可列出所有可用的 Java 版本

sdk list java
Run Code Online (Sandbox Code Playgroud)

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

sdk install java 11.0.3.hs-adpt
Run Code Online (Sandbox Code Playgroud)

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


yan*_*taq 5

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

brew uninstall sbt
Run Code Online (Sandbox Code Playgroud)

安装sdkman

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
Run Code Online (Sandbox Code Playgroud)

通过 sdk 安装 sbt

sdk install sbt
Run Code Online (Sandbox Code Playgroud)