web-dev-qa-db-ja.com

「サポートされていないmajor.minorバージョン52.0」とはどういう意味ですか、どうすれば修正できますか?

わかりましたので、52.0はJava 8であり、例外はあるバージョンのJavaでコンパイルされたコードと別のバージョンでコンパイルされたコードがあることを大まかに理解しています。私が頭を動かせないのは、それがどちらの方向にあるかです。

スタックトレースは次のとおりです。

Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/openrdf/model/ValueFactory : Unsupported major.minor version 52.0
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(ClassLoader.Java:800)
    at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
    at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:449)
    at Java.net.URLClassLoader.access$100(URLClassLoader.Java:71)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:361)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:425)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:358)
    at Java.lang.Class.getDeclaredMethods0(Native Method)
    at Java.lang.Class.privateGetDeclaredMethods(Class.Java:2615)
    at Java.lang.Class.getMethod0(Class.Java:2856)
    at Java.lang.Class.getMethod(Class.Java:1668)
    at Sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.Java:494)
    at Sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.Java:486)

Eclipseからコードを実行していますが、メインに到達する前にクラッシュします。コンプライアンスレベル/ JREを変更するようにと言って、ここでいくつかの投稿をフォローしましたが、修正することができないようです。

エラーは、クラス「ValueFactory」がJava 8でコンパイルされたということですか、それとも私のコードにはあるのでしょうか?コンプライアンスレベルを1.6、1.7、1.8に変更しようとしましたが、どちらも問題を修正しませんでした。

23
Andy

ここではコンプライアンスレベルを変更するために必要をしませんが、そうする必要がありますが、それは問題ではありません。

コード準拠により、コードが特定のJavaバージョンと互換性があることが保証されます。

たとえば、Java 6を対象とするコードコンプライアンスがある場合、Java 7または8の新しい構文機能(ダイヤモンド、ラムダなど)を使用することはできません。 。

ここでの実際の問題は、クラスパスのプロジェクトの依存関係とは異なるように見えるJavaバージョンで何かをコンパイルしようとしていることです。

代わりに、ビルドに使用しているJDK/JREを確認する必要があります。

Eclipseで、プロジェクトプロパティを開き、Javaビルドパスで選択したJREを確認します。

カスタムAnt(など)スクリプトを使用している場合は、上記でそれだけでは不十分な場合も参照してください。

15
Mena

コードはJava 8.でコンパイルされました。

コードを古いJDK(準拠レベル)でコンパイルするか、Java 8 JREで実行します。

お役に立てれば...

8
R. Horber

実際には、より高いJDK(この場合はJDK 1.8)を対象にコンパイルされたコードがありますが、実行時には、より低いJRE(JRE 7以下)を提供しています。

コンパイル中にターゲットパラメータを追加することにより、この問題を修正できます。
例えば。ランタイムターゲットが1.7の場合、1.7以下を使用する必要があります

javac -target 1.7 *.Java

eclipseを使用している場合、このパラメーターは[ウィンドウ]-> [設定]-> Java->コンパイラー->「コンパイラー準拠レベル」の設定=ランタイムjreバージョン以下を選択して送信できます。

5
rsingh25