Ako opraviť java.lang.UnsupportedClassVersionError

1. Úvod

V tomto krátkom tutoriáli sa dozvieme, čo spôsobuje chybu runtime Java java.lang.UnsupportedClassVersionError: nepodporovaná verzia major.minor a ako to napraviť.

2. Pohľad na chybu

Začnime tým, že sa pozrieme na príklad chyby:

Výnimka vo vlákne „main“ java.lang.UnsupportedClassVersionError: com / baeldung / MajorMinorApp bola kompilovaná z novšej verzie Java Runtime (súbor triedy 55.0), táto verzia Java Runtime rozpoznáva iba verzie súborov triedy do 52.0

Táto chyba nám hovorí, že naša trieda bola kompilovaná vo vyššej verzii Javy, ako bola verzia, s ktorou sme sa ju pokúsili spustiť. V tomto prípade sme konkrétnejšie zostavili našu triedu s jazykom Java 11 a pokúsili sme sa ho spustiť s jazykom Java 8.

2.1. Čísla verzií Java

Pre porovnanie, poďme sa rýchlo pozrieť na čísla verzií Java. To sa bude hodiť v prípade, že si budeme musieť stiahnuť príslušnú verziu Java.

Čísla hlavnej a vedľajšej verzie sú uložené v bytecode triedy v bajtoch šesť a sedem.

Pozrime sa, ako sa hlavné čísla verzií mapujú na verzie Java:

  • 45 = Java 1.1
  • 46 = Java 1.2
  • 47 = Java 1.3
  • 48 = Java 1.4
  • 49 = Java 5
  • 50 = Java 6
  • 51 = Java 7
  • 52 = Java 8
  • 53 = Java 9
  • 54 = Java 10
  • 55 = Java 11
  • 56 = Java 12
  • 57 = Java 13

3. Opravte príkazový riadok

Poďme si teraz predstaviť, ako môžeme vyriešiť túto chybu pri spustení Javy z príkazového riadku.

Podľa našej situácie Túto chybu môžeme vyriešiť dvoma spôsobmi: skompilovať náš kód pre staršiu verziu Javy alebo spustiť náš kód pre novšiu verziu Javy.

Konečné rozhodnutie závisí od našej situácie. Ak potrebujeme použiť knižnicu tretích strán, ktorá už bola kompilovaná na vyššej úrovni, našou najlepšou možnosťou je pravdepodobne spustiť našu aplikáciu pomocou novšej verzie Java. Ak balíme aplikáciu na distribúciu, mohlo by byť najlepšie zostaviť ju na staršiu verziu.

3.1. JAVA_HOME Premenná prostredia

Začnime kontrolou, ako je na tom JAVA_HOME premenná je nastavená. Toto nám prezradí, ktoré JDK sa používajú, keď bežíme javac z nášho príkazového riadku:

echo% JAVA_HOME% C: \ Apps \ Java \ jdk8-x64

Ak sme pripravení úplne prejsť na novšiu JDK, môžeme si stiahnuť novšiu verziu a skontrolovať, či je CESTA a JAVA_HOME premenné prostredia sú vhodne nastavené.

3.2. Prevádzka nového JRE

Vráťme sa k nášmu príkladu, pozrime sa na to, ako môžeme vyriešiť chybu spustením vo vyššej verzii Java. Za predpokladu, že máme Java 11 JRE C: \ Apps \ jdk-11.0.2, náš kód môžeme spustiť pomocou java pribalený príkaz:

C: \ Apps \ jdk-11.0.2 \ bin \ java com.baeldung.MajorMinorApp Hello World!

3.3. Zostavovanie so starším JDK

Ak píšeme aplikáciu, ktorú chceme spustiť až po určitú verziu Javy, musíme pre túto verziu skompilovať kód.

Môžeme to urobiť jedným z troch spôsobov: pomocou staršej JDK na kompiláciu nášho kódu pomocou -bootclasspath, -zdroja -cieľ možnosti javac príkaz (JDK 8 a starší) alebo pomocou príkazu –Pustiť možnosť (JDK 9 a novšia).

Začnime používaním staršej JDK, podobne ako sme použili novší JRE na spustenie nášho kódu:

C: \ Apps \ Java \ jdk1.8.0_31 \ bin \ javac com / baeldung / MajorMinorApp.java

Je možné len použiť -zdroj a -cieľ, ale stále môže vytvárať súbory triedy, ktoré nie sú kompatibilné so staršou Javou.

Aby sme zaistili kompatibilitu, môžeme poukázať -bootclasspath na rt.jar cieľového JRE:

javac -bootclasspath "C: \ Apps \ Java \ jdk1.8.0_31 \ jre \ lib \ rt.jar" \ -source 1,8 - cieľ 1,8 com / baeldung / MajorMinorApp.java

Vyššie uvedené platí hlavne pre JDK 8 a nižšie. V JDK 9 –Pustiť bol pridaný parameter na nahradenie -zdroj a -cieľ. The –Pustiť Táto možnosť podporuje ciele 6, 7, 8, 9, 10 a 11.

Poďme použiť –Pustiť zacieliť na Javu 8:

javac - vydanie 8 com / baeldung / MajorMinorApp.java

Teraz môžeme náš kód spustiť na prostredí Java 8 alebo vyššom JRE.

4. Zatmenie IDE

Teraz, keď chápeme chybu a všeobecný prístup k ich náprave, vezmime to, čo sme sa naučili, a uvidíme, ako ich môžeme použiť pri práci v prostredí Eclipse IDE.

4.1. Zmena JRE

Za predpokladu, že už máme Eclipse nakonfigurované s rôznymi verziami Javy, zmeňme JRE nášho projektu.

Poďme k nášmu Vlastnosti projektu, potom na Cesta zostavenia Javaa potom Knižnice tab. Hneď ako tam vyberieme JRE a klikneme Upraviť:

Teraz si vyberme Náhradník JRE a ukážte na našu inštaláciu Java 11:

V tomto okamihu bude naša aplikácia bežať na prostredí Java 11.

4.2. Zmena úrovne kompilátora

Poďme sa teraz pozrieť na to, ako môžeme zmeniť náš cieľ na nižšiu úroveň Javy.

Najskôr sa vráťme k nášmu Vlastnosti projektupotom Kompilátor Javaa skontrolovať Povoliť nastavenia špecifické pre projekt:

Tu môžeme nastaviť náš projekt na kompiláciu pre staršie verzie Javy a prispôsobiť ďalšie nastavenia súladu:

5. IntelliJ IDEA

Môžeme tiež ovládať verziu Javy, ktorú používame na kompiláciu a spustenie v IntelliJ IDEA.

5.1. Pridáva sa JDK

Predtým si ukážeme, ako pridať ďalšie súbory JDK. Poďme do Súbor -> Štruktúra projektu -> Nastavenia platformy -> SDK:

Kliknite na ikonu plus v strednom stĺpci a vyberte ikonu JDK z rozbaľovacej ponuky a vyberte naše umiestnenie JDK:

5.2. Zmena JRE

Najprv sa pozrieme na to, ako použiť IDEA na spustenie nášho projektu na novšom JRE.

Poďme do Spustiť -> Upraviť konfigurácie ... a zmeniť naše JRE do 11:

Teraz, keď spustíme náš projekt, bude bežať s Java 11 JRE.

5.3. Zmena úrovne kompilátora

Ak distribuujeme našu aplikáciu tak, aby fungovala na nižšom JRE, musíme upraviť našu úroveň kompilátora tak, aby bola zameraná na staršiu verziu Javy.

Poďme do Súbor -> Štruktúra projektu ... -> Nastavenia projektu -> Projekt a zmeniť naše Project SDK a Jazyková úroveň projektu:

Teraz môžeme vytvoriť náš projekt a vygenerované súbory triedy budú bežať v prostredí Java 8 a vyššej.

6. Maven

Keď v Mavene zostavíme a zabalíme súbor, môžeme ovládať verziu Java, na ktorú zacieľujeme.

Pri použití Java 8 alebo staršej nastavíme zdroj a cieľ doplnku kompilátora.

Nastavíme zdroj a cieľ pomocou vlastností doplnku kompilátora:

 1.8 1.8 

Prípadne môžeme nastaviť zdroj a cieľ v doplnku kompilátora:

  maven-compiler-plugin 1.8 1.8 

Vďaka –Pustiť pridaná do Java 9, môžeme to nakonfigurovať aj s Maven.

Použime vlastnosť doplnku kompilátora na nastavenie parametra prepustenie:

 8 

Alebo môžeme priamo nakonfigurovať plugin kompilátora:

  maven-compiler-plugin 8 

7. Záver

V tomto krátkom článku sme sa dozvedeli, čo spôsobuje java.lang.UnsupportedClassVersionError: nepodporovaná verzia major.minor chybové hlásenie a ako ho opraviť.


$config[zx-auto] not found$config[zx-overlay] not found