#author("2017-07-07T15:22:52+09:00","","")
#navi(../)
* UnsupportedClassVersionErrorの原因及び対処法 [#g4e9669e]
Javaソースをコンパイルして実行しようとしたら以下のようなエラーメッセージが表示されて実行できない時の原因および対処方法です。
 java.lang.UnsupportedClassVersionError: Hello : Unsupported major.minor version 52.0

#contents

* エラー出力例 [#qf083ab4]
以下のようにjavacコマンドでコンパイルして、javaコマンドで実行しようとしたら、以下のようなメッセージが表示された場合の原因および対処方法です。
 $ javac Hello.java
 $ java Hello
 java.lang.UnsupportedClassVersionError: Hello : Unsupported major.minor version 52.0
         at java.lang.ClassLoader.defineClass1(Native Method)
         at java.lang.ClassLoader.defineClass(Unknown Source)
         at java.security.SecureClassLoader.defineClass(Unknown Source)
         at java.net.URLClassLoader.defineClass(Unknown Source)
         at java.net.URLClassLoader.access$100(Unknown Source)
         at java.net.URLClassLoader$1.run(Unknown Source)
         at java.net.URLClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
 Exception in thread "main"
 $

* 今回使用したソース [#x982a6d3]
#ref(Hello.java)
 class Hello {
     public static void main(String[] args) {
         System.out.println("Hello");
     }
 }

* バージョン異なっていませんか? [#o46a6cb5]
javacとjavaのバージョンが異なっていませんか?~
javac > java のような関係になっていないでしょうか?~
javaとjavacバージョンは以下のコマンドで確認できます。
 javac -version
 
 java -version

今回、このエラーが発生した理由は以下の通りで、javac > java となっていました。
 $ 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)
 
 $ javac -version
 javac 1.8.0_102

javacのバージョンは1.8でjavaが1.7でした。~
これではしかられますね。

再度、PATHを設定し直しバージョン確認しコンパイルおよび実行しています。
 $ java -version
 java version "1.8.0_102"
 Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
 Java HotSpot(TM) Client VM (build 25.102-b14, mixed mode)
 
 $ javac -version
 javac 1.8.0_102
同一バージョンになったので、コンパイル&実行してみます。
 $ javac Hello.java ; java Hello
 Hello

UnsupportedClassVersionErrorが発生せず、正常に動作しました。

* javacでバージョン指定する方法もある [#w4b71077]
上記では、バージョンの異なるjavacとjavaのため(javac > java)UnsupportedClassVersionErrorが発生しました。~
何らかの都合により、javacのバージョン変更することができない場合は、javacコマンドにバージョンを指定します。~
環境は以下の通りです。
 $ 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)
 
 $ javac -version
 javac 1.8.0_102

source, targetオプションにより、バージョンを指定してコンパイルします。~
以下の例では、1.7を指定しています。
 $ javac -source 1.7 -target 1.7 Hello.java
 警告: [options] ブートストラップ・クラスパスが-source 1.7と一緒に設定されていません
 警告1個
 
 $ java Hello
 Hello

以上、UnsupportedClassVersionErrorの原因及び対処方法でした。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS