読者です 読者をやめる 読者になる 読者になる

望月いちろうのREADME.md

書き溜めておいた技術記事や旅行記のバックアップです。

Scalaで'(java/lang/CharSequence.class)' is broken と出てしまった時の対処法

Scala JVM OSX

f:id:mochizuki_p:20161003210224g:plain

先日機械学習スクリプトScalaで動かしたときのことです。

$  java -jar example.jar example.scala

このようなエラーが発生してしまいました。

error: error while loading CharSequence, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/rt.jar(java/lang/CharSequence.class)' is broken

対処法

Javaのバージョンを下げる

この時はscala-2.11.7を利用していました。実はこのバージョンはJava8のJVMではうまく動作しません。brewではここまで細かくは設定を考慮してくれないのです。

1.Java7をインストールする。

$ brew cask install java7

そうしたらこのような感じでインストール完了

==> Caveats
This Cask makes minor modifications to the JRE to prevent any packaged
application issues.

If your Java application still asks for JRE installation, you might need to
reboot or logout/login.

The JRE packaging bug is discussed here:

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361

Installing this Cask means you have AGREED to the Oracle Binary Code License
Agreement for Java SE at

    http://www.oracle.com/technetwork/java/javase/terms/license/index.html

==> Downloading http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-ma
######################################################################## 100.0%
==> Verifying checksum for Cask java7
==> Running installer for java7; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are i
==> installer: Package name is JDK 7 Update 80
==> installer: Installing at base path /
==> installer: The install was successful.
🍺  java7 was successfully installed!

2.Javaのバージョンを切り替える

次にバージョンを切り替えます。/System/Library/Frameworks/JavaVM.framework/Versions/A/Commandsに移動して

$ cd /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands

JVMのパスを確認

$ ./java_home -v "1.7"

/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

これを設定します。

$ PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin:${PATH}

一応バージョンを確認します。

$ java -version

java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

うまくバージョンが切り替わりました。もしJava8に戻したい場合は同じ手順を繰り返せばよいのです。 この後でScalaスクリプトが動作することを確認しました。f:id:mochizuki_p:20161003210224g:plain