Unsupported major.minor version 51.0
以下のエラーが出て実行できない。
Exception in thread “main” java.lang.UnsupportedClassVersionError:
jp/arison/Hoge : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: jp.arison.Hoge. Program will exit.
JDKが1.7のところJREが1.6だったため起こるエラー。
version 51.0 ってのはJDKが1.7。
詳細は
http://www.ne.jp/asahi/hishidama/home/tech/java/application.html
コンパイルは1.7だけど、実行が1.6だったから、新しいものを古いもんで動かせない。
誤解を承知で言うと、明日の自分が知っていることを、昔の自分に聞いてもわからないって感じだろうか。
(A)JRE1.6で動くようにコンパイルしなおすか。
(B)JRE1.7にあげて実行するか。
(B)案が手っ取り早いんだけど、既存に影響があるかもしれないので(B)案で。
コンパイルするときに、antを使ってbuildしていたんだけど
antが勝手に、JDK1.7に入っていたtool.jarとrt.jarを用いていたので
JRE1.7でしか動かなくなっていた。JRE1.6で動かしたから今回のエラーが出たわけ。
tools.jar
javac.exeとかコンパイル時に使用されるjavaで書かれたツール群。javacは実はjavaで書かれている。
rt.jar
ランタイムクラスライブラリ。java.lang.StringなどのJava標準クラス。
tools.jarだけJRE1.6用に差し替えてコンパイルしたら、もっといいtools.jar使えよって警告でた。
rt.jarも併せて指定しないといけないのかな。
で、さらに言えば、build.xmlにも指定する箇所があった。
target
source
bootclasspath
で、jarを作ったら、動作しました。
【参考】
http://www26.atwiki.jp/ochamemo/pages/21.html
http://www.javaroad.jp/bbs/answer.jsp?q_id=2012120512023815