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

ルーズリーフ

公私におよぶ経験値獲得履歴的ななにか。

RuntimeException: java.lang.UnsupportedClassVersionError の解消

新しいことをして遊ぼうと思い、Play2.3.6とJava1.8でアプリをrunした時に出た実行時エラー。

[info] Compiling 2 Scala sources and 1 Java source to /home/hiroka/download/activator-1.2.10-minimal/BehaviorScan/target/scala-2.11/classes...
[warn] Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 52.0
[warn] Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 52.0
[warn] Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 52.0
[info] play - Application started (Dev)
[error] application - 

! @6k3gn21mp - Internal server error, for (GET) [/] ->

play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 52.0]]
        at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.6.jar:2.3.6]
        at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.6.jar:2.3.6]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$14$$anonfun$apply$1.applyOrElse(PlayDefaultUpstreamHandler.scala:205) [play_2.11-2.3.6.jar:2.3.6]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$14$$anonfun$apply$1.applyOrElse(PlayDefaultUpstreamHandler.scala:202) [play_2.11-2.3.6.jar:2.3.6]
        at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36) [scala-library-2.11.1.jar:na]
Caused by: java.lang.RuntimeException: java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 52.0
        at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:523) ~[play_2.11-2.3.6.jar:2.3.6]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130) ~[play_2.11-2.3.6.jar:2.3.6]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130) ~[play_2.11-2.3.6.jar:2.3.6]
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21) ~[play_2.11-2.3.6.jar:2.3.6]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:129) ~[play_2.11-2.3.6.jar:2.3.6]
Caused by: java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.7.0_17]
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791) ~[na:1.7.0_17]
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.7.0_17]
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[na:1.7.0_17]
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71) ~[na:1.7.0_17]

[success] Total time: 3650 s, completed 2014/10/31 13:26:48

ちなみに私の開発環境の状態はというと、

  • Javaはalternativesで複数バージョン切り替えて使用中
  • Playは2.0から2.1、2.2、2.3と適宜アップデートして使用中
  • 直近のお仕事でPlay2.2とJava1.7を使っていた

コンパイルに使うJavaと実行に使うJavaのバージョンが違うっぽいーということで、
よくよく思いだしたらPlayって実行時にはJAVA_HOMEで指定されたJavaを使っていた気がする・・・。
( $ java -version は 1.8 にしたけど、$ echo $JAVA_HOME は 1.7 だった私の環境)

というわけで、JAVA_HOMEをちゃんと1.8に合わせたら、ビンゴでした。

なんでか大昔にも一度躓いた記憶がある気がする。
何をした時だったかな。

その時よりは早く思い出せたので、成長だと思っておきます。