Pytanie Co oznacza "Unsupported major.minor version 52.0" i jak mogę to naprawić? [duplikować]


To pytanie już zawiera odpowiedź:

Ok, więc nie rozumiem, że 52.0 to Java 8 i że wyjątki oznaczają, że jakiś kod jest kompilowany z jedną wersją java, a niektóre z drugą. Czego nie mogę się obezwładnić, to w jaki sposób.

Oto ścieżka stosu, którą otrzymuję:

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)

Wykonuję swój kod z zaćmienia i ulega awarii przed osiągnięciem głównej. Obserwowałem kilka postów mówiących o zmianie poziomu zgodności / mojego środowiska JRE, ale nie mogę tego naprawić.

Czy błąd mówi, że klasa "ValueFactory" została skompilowana z java 8, czy też z moim kodem? Próbowałem zmienić poziom zgodności na 1.6, 1.7 i 1.8, ale żaden z nich nie rozwiązał problemu.


18
2018-06-03 10:33


pochodzenie




Odpowiedzi:


Ty nie potrzeba aby zmienić poziom zgodności tutaj, a raczej powinieneś, ale to nie jest problem.

Zgodność kodu zapewnia zgodność kodu z daną wersją Java.

Na przykład, jeśli masz kodowanie zgodności z przepisami Java 6, nie możesz korzystać z nowych funkcji składni Java 7 lub 8 (np. Diament, lambda itp.).

Rzeczywistym problemem jest to, że próbujesz skompilować coś w wersji Java, która wydaje się inna niż zależności projektu w ścieżce klas.

Zamiast tego powinieneś sprawdzić JDK / JRE, którego używasz do kompilacji.

W środowisku Eclipse otwórz właściwości projektu i sprawdź wybrane środowisko JRE w ścieżce budowania Java.

Jeśli używasz niestandardowych skryptów Ant (itp.), Również chcesz tam zajrzeć, na wypadek gdyby powyższe nie było wystarczające per se.


11
2018-06-03 10:35



Mniej więcej. Dla wyjaśnienia dla kogokolwiek innego. Pracowałem z JDK 1.7.0_79. Dodałem jdk 1.8.0_81 i wybrałem go w oknie -> Preferencje -> Java -> Zainstalowane środowiska JRE. Problem był w ścieżce budowania dla danego projektu, w "Zamów i eksportuj" JavaSE-1.7 "był wyżej na liście niż" jdk1.8.0_91 ". Zgaduję, że oznacza to, że biblioteki systemowe 1.7 zostały zaimportowane i preferowane powyżej 1.8. - Andy
@ Cieszę się, że wiem, że działa teraz dla ciebie. - Mena


Twój kod został skompilowany przy pomocy Java 8.

Zbuduj swój kod ze starszym JDK (poziom zgodności) lub uruchom go na JRE Java 8.

Mam nadzieję że to pomoże...


8
2018-06-03 10:37





Właściwie masz skompilowany kod kierujący wyższy JDK (JDK 1.8 w twoim przypadku), ale w czasie wykonywania dostarczasz niższy JRE (JRE 7 lub mniej).

możesz rozwiązać ten problem, dodając parametr docelowy podczas kompilacji
na przykład jeśli celem środowiska wykonawczego jest 1,7, należy użyć wersji 1.7 lub niższej

javac -target 1.7 *.java

jeśli używasz Zaćmienie, możesz wysłać ten parametr w Okno -> Preferencje -> Java -> Kompilator -> ustaw "Poziom zgodności kompilatora" = wybierz wersję środowiska runtime jre lub niższą.


5
2018-06-03 11:01