Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld : Unsupported major.minor version 51.0
JDKが1.7のところJREが1.6だったため起こるエラーで、JREを1.7にあげて実行できるようになりました。
JDK 1.7のダウンロードサイト
Java SE Development Kit 7u2 Downloads http://bit.ly/uJQD7G
JRE 1.7のダウンロードサイト
Java SE Runtime Environment 7u2 Downloads http://bit.ly/s8DlNQ
あとこのままだと、/usr/bin/javaにある古いjavaが使われるので実行パスを変更する必要があります(後述します)。
以下のサイトに従ってJavaをインストールしてみました。
Javaアプリケーションサーバー構築(Tomcat6) - CentOSで自宅サーバー構築 http://bit.ly/w2fyGd
JDKインストールについては上記サイトの手順では1.6のパッケージでbinファイルを自己解凍しているが、以下のようにrpmファイルだったのでいきなりインストールできました。便利になってます。
# rpm -ivh jdk-7u2-linux-i586.rpm 準備中... ########################################### [100%] 1:jdk ########################################### [100%] Unpacking JAR files... rt.jar... jsse.jar... charsets.jar... tools.jar... localedata.jar... plugin.jar... javaws.jar... deploy.jar...実行パスを追加する設定を/etc/profileに書き込む
# vi /etc/profile
export JAVA_HOME=/usr/java/default export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar/etc/profileの最下行に3行追加しました。設定を反映させます。
# source /etc/profile最後に環境変数PATHを再度書き換えることになりました(後述)。
続けて、CentOSで自宅サーバー構築 http://bit.ly/w2fyGd に従ってHelloWord.javaを作成しjavacコマンドでコンパイルしjavaコマンドで実行すると以下のようなエラーがでます。
# vi HelloJava.java
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
# javac HelloWorld.java # java HelloWorld Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: HelloWorld. Program will exit.「Exception in thread "main" java.lang.UnsupportedClassVersionError」でGoogle検索かけてみると以下のサイトが見つかりました。
Javaの道>掲示板(実行時のNoClassDefFoundErrorについて) http://bit.ly/sxIjR5
みなさん同じような現象に困ったようです。javacコンパイラとjava実行コマンドのバージョンが一致しないためにでるエラーということです。
# javac -J-version java version "1.7.0_02" Java(TM) SE Runtime Environment (build 1.7.0_02-b13) Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode, sharing) # java -version java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.8) (rhel-1.22.1.9.8.el5_6-i386) OpenJDK Client VM (build 19.0-b09, mixed mode)javacが1.7でjavaはOpenJDKの1.6ということでバージョンが一致していません。
という訳で、JREも最新の1.7をダウンロードすることにしました。
# rpm -ivh jre-7u2-linux-i586.rpm 準備中... ########################################### [100%] 1:jre ########################################### [100%] Unpacking JAR files... rt.jar... jsse.jar... charsets.jar... localedata.jar... plugin.jar... javaws.jar... deploy.jar...これで良し良しと思いましたが、エラーは変わらず 「Exception in thread "main" java.lang.UnsupportedClassVersionError」になります。
以下のようにOpen-JDKのJRE1.6を削除してみても同様の現象。
#rpm -e java-1.6.0-openjdk-1.6.0.0-1.22.1.9.8.el5_6おかしいなと思いながら、もう一度javaのバージョンを確認してみると…。
# java -version java version "1.4.2" gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-50) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.!?バージョンが1.4.2になってる!1.6からさらに下がっています。
どこかにjavaコマンドがあるようなので探してみました。
# which java /usr/bin/java/usr/bin下にありました。あまり深く考えず、実行パスの優先順位を変えることで解決させました。
# vi /etc/profile最下行に追加した3行のうち、環境変数PATHだけ書き換えます。
export JAVA_HOME=/usr/java/default #export PATH=$PATH:$JAVA_HOME/bin export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jarこれで、設定を反映させて確認するとOKです。
# source /etc/profile # which java /usr/java/default/bin/java #java -version java version "1.7.0_02" Java(TM) SE Runtime Environment (build 1.7.0_02-b13) Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode, sharing)これでjava実行コマンドは1.7に。javacコンパイラも1.7になり問題なく実行できました。
# java HelloWorld Hello Worldこまかいバージョン違いで手間の取る作業が増えますね(-_-;;;
この手のトラブルはブログにしておいて、情報を共有しておきます。
(自分もまた忘れてしまいそうだし!!)
0 件のコメント:
コメントを投稿