Kako popraviti java.lang.UnsupportedClassVersionError

1. Uvod

U ovom kratkom vodiču naučit ćemo što uzrokuje pogrešku izvršavanja Java-a java.lang.UnsupportedClassVersionError: Nepodržana major.minor verzija i kako to popraviti.

2. Pogled na pogrešku

Počnimo s razmatranjem primjera pogreške:

Iznimka u niti "main" java.lang.UnsupportedClassVersionError: com / baeldung / MajorMinorApp sastavljena je od novije verzije Java Runtime (verzija datoteke klase 55.0), ova verzija Java Runtime prepoznaje samo verzije datoteke klase do 52.0

Ova pogreška govori nam da je naša klasa sastavljena na višoj verziji Jave od verzije kojom smo je pokušali pokrenuti. Točnije, u ovom smo slučaju kompilirali našu klasu s Javom 11 i pokušali je pokrenuti s Javom 8.

2.1. Brojevi Java verzije

Za referencu, pogledajmo brzo brojeve Java verzije. Ovo će dobro doći u slučaju da trebamo preuzeti odgovarajuću Javinu verziju.

Brojevi glavne i male verzije pohranjeni su u bytecodeu klase u bajtovima šest i sedam.

Pogledajmo kako se brojevi glavnih verzija preslikavaju na verzije 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. Popravite putem naredbenog retka

Razmotrimo sada kako možemo riješiti ovu pogrešku prilikom pokretanja Jave iz naredbenog retka.

Ovisno o našoj situaciji, ovu grešku možemo riješiti na dva načina: sastaviti naš kôd za stariju verziju Jave ili pokrenuti naš kôd na novijoj Java verziji.

Konačna odluka ovisi o našoj situaciji. Ako trebamo koristiti biblioteku treće strane koja je već sastavljena na višoj razini, naša najbolja opcija je vjerojatno pokretanje naše aplikacije pomoću novije verzije Java. Ako pakiramo aplikaciju za distribuciju, možda bi bilo najbolje kompajlirati na stariju verziju.

3.1. JAVA_KUĆA Promjenjiva okolina

Počnimo s provjerom kako naša JAVA_KUĆA postavljena je varijabla. Ovo će nam reći koji se JDK koristi kada trčimo javac iz našeg naredbenog retka:

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

Ako smo spremni u potpunosti preći na noviji JDK, možemo preuzeti noviju verziju i provjeriti je li naša STAZA i JAVA_KUĆA varijable okoline postavljaju se na odgovarajući način.

3.2. Pokretanje novog JRE-a

Vraćajući se našem primjeru, pogledajmo kako možemo riješiti pogrešku pokretanjem na višoj verziji Jave. Pod pretpostavkom da imamo Java 11 JRE u C: \ Apps \ jdk-11.0.2, možemo pokrenuti naš kod s Java naredba u paketu s njom:

C: \ Apps \ jdk-11.0.2 \ bin \ java com.baeldung.MajorMinorApp Pozdrav svijetu!

3.3. Sastavljanje sa starijim JDK

Ako pišemo aplikaciju za koju želimo da se pokreće do određene verzije Jave, trebamo kompajlirati kod za tu verziju.

To možemo učiniti na jedan od tri načina: koristeći stariji JDK za kompajliranje našeg koda, koristeći -bootclasspath, -izvor, i -cilj mogućnosti javac naredba (JDK 8 i starije) ili pomoću –Objava opcija (JDK 9 i novije).

Počnimo s korištenjem starijeg JDK-a, slično kao što smo koristili noviji JRE za pokretanje našeg koda:

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

Moguće je samo koristiti -izvor i -cilj, ali svejedno može stvoriti datoteke klase koje nisu kompatibilne sa starijom Javom.

Da bismo osigurali kompatibilnost, možemo istaknuti -bootclasspath na rt.jar ciljanog JRE:

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

Gore navedeno odnosi se uglavnom na JDK 8 i starije verzije. U JDK 9, –Objava parametar je dodan za zamjenu -izvor i -cilj. The –Objava opcija podržava ciljeve 6, 7, 8, 9, 10 i 11.

Iskoristimo –Objava za ciljanje Jave 8:

javac --release 8 com / baeldung / MajorMinorApp.java

Sada možemo pokrenuti naš kod na Java 8 ili novijoj JRE.

4. Eclipse IDE

Sad kad razumijemo pogrešku i općeniti pristup ispravljanju, uzmimo ono što smo naučili i pogledajte kako to možemo primijeniti tijekom rada u Eclipse IDE-u.

4.1. Promjena JRE

Pod pretpostavkom da već imamo Eclipse konfiguriran s različitim verzijama Jave, promijenimo JRE našeg projekta.

Idemo na naše Svojstva projekta, zatim do Javni put izgradnje, a zatim Knjižnice tab. Kad stignemo tamo, odabrat ćemo JRE i kliknuti Uredi:

Sad, birajmo Alternativni JRE i pokažite na našu instalaciju Java 11:

U ovom će se trenutku naša aplikacija pokrenuti protiv Jave 11.

4.2. Promjena razine sastavljača

Pogledajmo sada kako možemo promijeniti svoj cilj na nižu razinu Jave.

Prvo, vratimo se našem Svojstva projekta, onda Java kompajler, i provjerite Omogućite postavke specifične za projekt:

Ovdje možemo postaviti naš projekt za kompajliranje za starije verzije Jave i prilagoditi ostale postavke usklađenosti:

5. IntelliJ IDEA

Također možemo kontrolirati verziju Jave koju koristimo za kompajliranje i pokretanje u IntelliJ IDEA.

5.1. Dodavanje JDK

Prije nego što to učinimo, vidjet ćemo kako dodati dodatne JDK-ove. Idemo Datoteka -> Struktura projekta -> Postavke platforme -> SDK-ovi:

Kliknimo ikonu plus u srednjem stupcu, odaberite JDK s padajućeg izbornika i odaberite naše JDK mjesto:

5.2. Promjena JRE

Prvo ćemo pogledati kako koristiti IDEA za pokretanje našeg projekta na novijoj JRE.

Idemo Pokreni -> Uredi konfiguracije ... i promijeniti naše JRE do 11:

Sada, kada pokrenemo naš projekt, on će se izvoditi s Java 11 JRE.

5.3. Promjena razine sastavljača

Ako distribuiramo našu aplikaciju radi na nižem JRE, moramo prilagoditi razinu kompajlera tako da cilja stariju verziju Jave.

Idemo Datoteka -> Struktura projekta ... -> Postavke projekta -> Projekt i promijeniti naše Projektni SDK i Razina jezika projekta:

Sada možemo graditi svoj projekt, a generirane datoteke klase izvodit će se na Javi 8 i novijoj.

6. Maven

Kada gradimo i pakiramo datoteku u Mavenu, možemo kontrolirati verziju Jave koju ciljamo.

Kada upotrebljavamo Javu 8 ili stariju, postavljamo izvor i cilj dodatka za kompajler.

Postavimo izvor i cilj pomoću svojstava dodatka kompajlera:

 1.8 1.8 

Alternativno, možemo postaviti izvor i cilj u dodatku za kompajler:

  maven-compiler-plugin 1.8 1.8 

Uz –Objava opcija dodana u Javi 9, to možemo konfigurirati i s Mavenom.

Upotrijebimo svojstvo dodatka kompajlera za postavljanje puštanje:

 8 

Ili možemo izravno konfigurirati dodatak za kompajler:

  maven-compiler-plugin 8 

7. Zaključak

U ovom kratkom članku saznali smo što uzrokuje java.lang.UnsupportedClassVersionError: Nepodržana major.minor verzija poruku pogreške i kako je popraviti.