macOSにsbt環境を入れようとしたら String.class is broken ...
sbtで動作するプロジェクトを動作させようとして、環境構築を行った際に
$ sbt run > ... > error: error while loading String, class file '/modules/java.base/java/lang/String.class' is broken (class java.lang.NullPointerException/null) > ...
と出てしまい、動作しなくなる現象に直面してしまいました。
その解決方法について書いていこうと思います。
環境
現象
- sbtenvを導入し、sbt1.2.7をインストール
- scalaenvを導入し、scala2.13.0をインストール
- jenvを導入し、
brew install openjdk
でインストールしたjava14.0.2
をjenv global
に指定
その状態でプロジェクトを動作させようとすると、以下のエラーに遭遇しました。
$ sbt run > ... > error: error while loading String, class file '/modules/java.base/java/lang/String.class' is broken (class java.lang.NullPointerException/null) > ...
原因
調べてみると同様の質問がStack Over Flowに投稿されていました。
とのことです。
自分はJavaやScala周りを詳しく知らないので、なぜJDK13を参照してしまうのか、なぜJDK8/11がsbtに必要なのかは良くわかりませんが、やるべきことは書いてくれているのでやっていきましょう。
解決手順
今回はJDK8を導入することにしました。
$ brew tap AdoptOpenJDK/openjdk $ brew cask install adoptopenjdk8 $ jenv add /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home $ jenv versions > 1.8 > 14 > 14.0 >*14.0.2
sbtのプロジェクトを動作確認するなら以下の通りです。
$ jenv local 1.8 $ jenv local > 1.8 $ sbt run