Java.lang.UnsupportedClassVersionError repareren: niet-ondersteunde major.minor-versie

Ik probeer Notepad++te gebruiken als mijn alles-in-één tool bewerken, uitvoeren, compileren, enz.

Ik heb JREgeïnstalleerd en ik heb mijn padvariabele ingesteld naar de .../binmap.

Als ik mijn “Hallo wereld” in Notepad++ uitvoer, krijg ik dit bericht:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

Ik denk dat het probleem hier te maken heeft met versies; sommige versies van Java kunnen oud of te nieuw zijn.

  1. Hoe los ik het op?
  2. Moet ik de JDK installeren en mijn padvariabele naar de JDK instellen in plaats van JRE?
  3. Wat is het verschil tussen de variabele PATHin JRE of JDK?

Antwoord 1, autoriteit 100%

Het weergegeven versienummer beschrijft de versie van de JRE waarmee het klassenbestand compatibel is.

De gerapporteerde hoofdnummers zijn:

Java SE 17 = 61,
Java SE 16 = 60, 
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Bron: Wikipedia)

Om het eigenlijke probleem op te lossen, moet u proberen de Java-code uit te voeren met een nieuwere versie van Java JRE of de doelparameter op te geven voor de Java-compiler om de compiler opdracht te geven code te maken die compatibel is met eerdere Java-versies.

Om bijvoorbeeld klassenbestanden te genereren die compatibel zijn met Java 1.4, gebruikt u de volgende opdrachtregel:

javac -target 1.4 HelloWorld.java

Bij nieuwere versies van de Java-compiler krijgt u waarschijnlijk een waarschuwing dat het bootstrap-klassepad niet is ingesteld. Meer informatie over deze fout is beschikbaar in een blogpost Nieuwe javac-waarschuwing voor het instellen van een oudere bron zonder bootclasspath.


Antwoord 2, autoriteit 19%

java.lang.UnsupportedClassVersionErrortreedt op vanwege een hogere JDK tijdens het compileren en een lagere JDK tijdens runtime.


Antwoord 3, autoriteit 6%

In Eclipse ging ik gewoon naar de menuopdracht Venster-> Voorkeuren-> Java-> Compileren stel vervolgens “Compiler-complianceniveau” in op 1.6.


Antwoord 4, autoriteit 3%

Maak je geen zorgen, ik heb het opgelost.

Het is eigenlijk heel simpel – je moet BEIDE JRE / JDK met dezelfde versie installeren.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

Enzovoort.


Antwoord 5, autoriteit 2%

Deze fout betekent dat u een Java “klasse”-bestand probeert te laden dat is gecompileerd met een nieuwere versie van Java dan u hebt geïnstalleerd.

Uw bestand .classkan bijvoorbeeld zijn gecompileerd voor JDK 7 en u probeert het uit te voeren met JDK 6.

Dus de oplossing is om ofwel:

  • Upgrade uw Java-runtime of
  • Compileer de klasse opnieuw als je de broncode hebt, met je lokale Java-compiler (als je die hebt).

    javac bestandsnaam.java

Voor ontwikkelaars kan dit gebeuren als een andere ontwikkelaar een .class-bestand incheckt en deze een nieuwere versie van Java heeft dan u!


Antwoord 6

U probeert uw programma uit te voeren met een Java-versie die de versie waarin de code is gecompileerd niet ondersteunt. Dus in principe moet je je code hebben gecompileerd met een hogere versie en geprobeerd deze uit te voeren met een lagere versie.

Zoals u krijgt

Unsupported major.minor version 51.0

en versie 51.0komt overeen met J2SE 7je hebt hoogstwaarschijnlijk je code in Java 7 gecompileerd en probeert deze uit te voeren met een lagere versie. Controleer wat java -versionweergeeft. Het zou de Java 7-versie moeten zijn. Als dit niet het geval is, brengt u de juiste wijzigingen aan in het PATH/JAVA_HOME. Of u kunt compileren met dezelfde versie die u probeert om de code uit te voeren. Als de configuraties verwarrend zijn, kun je altijd het absolute pad /home/user/jdk1.7.0_11/bin/javacen /home/user/jdk1.7.0_11/bin/java.


Antwoord 7

Ik had een vergelijkbare situatie op Mac en het volgende proces werkte voor mij:

Typ in de terminal

vi ~/.profile

Voeg vervolgens deze regel toe aan het bestand en sla op

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

waarbij de versie die op uw computer is, zoals 1.7.0_25.

Sluit de editor af en typ het volgende commando om het effectief te maken

source ~/.profile 

Typ vervolgens java -version om het resultaat te controleren

java -version 

Wat is een .profile-bestand?

.profile-bestand is een verborgen bestand. Het is een optioneel bestand dat het systeem vertelt welke opdrachten moeten worden uitgevoerd wanneer de gebruiker wiens profielbestand het is, inlogt. Bijvoorbeeld, als mijn gebruikersnaam bruno is en er is een .profile-bestand in /Users/bruno/, alle inhoud wordt uitgevoerd tijdens de inlogprocedure.

Bron: http: //computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile–mac-30515


Antwoord 8

In het menu van Eclipse Venster-> Voorkeuren-> Java-> Compilervink ook “Projectspecifieke instellingen configureren” aan.

Als je nog steeds de fout hebt met dezelfde Java-versie: probeer de build-map van je project handmatig te verwijderen. Start Eclipse vervolgens opnieuw.


Antwoord 9

Je kunt een JAR-bibliotheek hebben die is gecompileerd in Java 7, en je hebt alleen Java 6 als Java Runtime. Het zou kunnen gebeuren met sommige nieuwe bibliotheken.


Antwoord 10

Het meest voorkomende probleem is een verkeerde configuratie van uw JAVA_HOME-variabele, die zou moeten verwijzen naar de juiste Java Development Kit-bibliotheek, als u er meerdere hebt geïnstalleerd.

Voer de volgende opdrachten uit om te zien waar de SDK Java-map zich bevindt:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian/Ubuntu

Om te controleren welke java (openjdk) je hebt geïnstalleerd, check via:

dpkg -l "openjdk*" | grep ^i

of:

update-java-alternatives -l

Om het te wijzigen, gebruik:

update-alternatives --config java

Voorvoegsel met sudoindien nodig.

om de alternatieve Java-versie te selecteren.

Of kijk welke beschikbaar zijn voor installatie:

apt-cache search ^openjdk

Voorvoegsel met sudoindien nodig.

Dan kunt u bijvoorbeeld installeren:

apt-get install openjdk-7-jre

Voorvoegsel met sudoindien nodig.

Fedora, Oracle Linux, Red Hat

Installeer/upgrade geschikt pakket via:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

Het java-1.7.0-openjdkpakket bevat alleen de Java Runtime Environment. Als je Java-programma’s wilt ontwikkelen, installeer dan het pakket java-1.7.0-openjdk-devel.

BSD

Er is een OpenJDK 7-pakket in de FreeBSD Ports-collectie genaamd openjdk7die waarschijnlijk moet opnieuw worden geconfigureerd.

Zie: OpenJDK-wikipagina.

Vensters

Installeer gewoon de juiste Java SE Development Kit-bibliotheek van de Oracle-siteof installeer

Jenkins

Als u dit probleem met Jenkins ondervindt, raadpleegt u:

Het zou echter moeten werken om de juiste versie van Java (nieuwere) te selecteren met update-alternatives.


Antwoord 11

Ik heb hetzelfde probleem ondervonden toen ik met een Ant-script werkte om mijn applicatie te bouwen .

Ik gebruik Eclipsevoor mijn applicatie-ontwikkeling en ik heb de compilerversie gewijzigd in de bouweigenschappen van het project. Maar dat werkte niet voor mij. Toen kwam ik erachter dat ik de compilerversie in het Ant-script kan leveren.

Ik heb het Ant-script aangepast in de sectie waar het Java-bestanden compileert.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Dit werkte voor mij om het niet-ondersteunde grote kleine probleem op te lossen.


Antwoord 12

Toen ik JDK1.7 installeerde, werd het probleem opgelost.


Antwoord 13

Ik kreeg hetzelfde probleem met een project geschreven in 1.7 en geprobeerd uit te voeren in 1.6.

Mijn oplossing in Eclipse:

  • Klik met de rechtermuisknop op uw project Eigenschappen -> Java-opbouwpad -> Bibliotheken

  • Selecteer uw JRE-systeembibliotheek en klik op Bewerkenaan de rechterkant en kies de doel-JRE.

  • Ga nu naar Java Compileraan de linkerkant en wijzig het Compiler-complianceniveaunaar uw doel.

Dat werkte voor mij.


Antwoord 14

Zoals elders door verschillende mensen beantwoord, wordt het Java-programma uitgevoerd op een oudere versie van Java dan waarvoor het is gecompileerd. Het moet worden “gecrosscompileerd” voor achterwaartse compatibiliteit. Anders gezegd, er is een mismatch tussen de bron- en de doelversie van Java.

Het wijzigen van opties in Eclipse-menu’s geeft geen antwoord op de oorspronkelijke poster, die zei dat hij/zij Eclipse niet gebruikt. Op OpenJDK javac versie 1.7 kunt u crosscompileren voor 1.6 als u de parameters -sourceen -targetgebruikt, plus het rt.jar-bestand van de doelversie (dat wil zeggen de oudere) tijdens het compileren. Als u de 1.6 JRE daadwerkelijk installeert, kunt u verwijzen naar de installatie ervan (bijvoorbeeld /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar op Ubuntu, /usr/jdk/jdk1. 6.0_60/jre/lib/rt.jar op SunOS blijkbaar. Sorry, ik weet niet waar het is op een Windows-systeem). Vind ik leuk:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

Het lijkt erop dat je rt.jar gewoon van internet kunt downloaden en ernaar kunt verwijzen. Dit is echter niet al te elegant:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java

Antwoord 15

Op basis hiervan…

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

Klik in Eclipse met de rechtermuisknop op het project in de pakketverkenner:

Pad bouwen-> Build-pad configureren

Onder:

Java-bouwpad-> Bibliotheken-> Bibliotheek toevoegen-> JRE-systeembibliotheek-> JRE’s geïnstalleerd-> Zoeken.

Voeg de vereiste JRE toe door de bibliotheek in de beschikbare lijst te selecteren nadat het zoeken is voltooid.


Antwoord 16

  • Als u Maven gebruikt, stelt u uw Java-compilatieniveau in. Open een opdrachtregel en schrijf java -versionvoor uw compileerniveau:

    Voer hier de afbeeldingsbeschrijving in

  • Als u IntelliJ IDEA gebruikt, selecteert u project → BestandInstellingenBuild Execution DeploymentCompilerJava-compiler. Verander dan bytecode als 1.7 zoals deze afbeelding:

    Voer hier de afbeeldingsbeschrijving in


Antwoord 17

Als u met dit probleem wordt geconfronteerd terwijl u Mavengebruikt, kunt u uw code compileren met de plug-in Maven Compiler .

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

UPDATE: stel sourceen targetin op 1.8, als u JDK 8 gebruikt.


Antwoord 18

Ik kreeg dezelfde foutmelding bij het uitvoeren van Ant vanuit Eclipse, maar de andere hier genoemde oplossingen hebben mijn probleem niet opgelost. Het grappige was dat het uitvoeren van Ant vanaf de Windows-opdrachtregel prima verliep, dus het moest een configuratieprobleem zijn binnen Eclipse.

Het bleek dat je onder Eclipse de omgeving kunt specificeren waar Ant mee zou moeten draaien en dit was ingesteld als een JRE in plaats van een JDK.

  • Ga naar: Uitvoeren -> Externe hulpmiddelen -> Configuraties van externe hulpprogramma’s …
  • Selecteer de Ant build.xml voor uw project (als u meerdere projecten heeft)
  • Activeer het tabblad ‘JRE’
  • Hier is gekozen voor ‘Afzonderlijke JRE: jre6’. Toen ik dit veranderde naar een JDK uit de 1.6 of 1.7 serie, was de fout verdwenen.

Antwoord 19

Je hebt een hogere versie van de JDK gebruikt om te compileren en probeert deze uit te voeren vanaf een lagere versie van JDK/JRE.

Zie de versie-informatie om dit te controleren:

javac -version
java -version

Ze zullen anders zijn en javac zal een hoger versienummer hebben.

Om dit te omzeilen, gebruik je Java vanuit de JDK-versie of als je een nieuwere JRE/JDK hebt die ook werkt.

which javacje de locatie zal vertellen, bijvoorbeeld /usr/bin/javac. Gewoon rechtstreeks uitvoeren met /usr/bin/java <program>.

OF je kunt de omgevingsvariabele instellen als een permanente oplossing.


Antwoord 20

Hoe los ik het op?

Deze fout betekent dat de JRE die wordt gebruikt om uw klassencode uit te voeren, de gebruikte versie van Java niet herkent. Meestal omdat de versie van Java die uw klassenbestand heeft gegenereerd (d.w.z. gecompileerd) nieuwer is.

Om het op te lossen, kunt u ofwel

a) Compileer uw Java-bronnen met dezelfde of oudere versie van de Java-compiler die zal worden gebruikt om deze uit te voeren. d.w.z. installeer de juiste JDK.

b) Compileer uw Java-bronnen met de nieuwere versie van de Java-compiler, maar in compatibiliteitsmodus. d.w.z. gebruik de parameter -target.

c) Voer uw gecompileerde klassen uit in een JRE die dezelfde of nieuwere versie is als de JDK die is gebruikt om de klassen te compileren.

U kunt de versies controleren die u momenteel gebruikt met
javac -versionvoor de compiler en java -versionvoor de runtime.

Moet ik de JDK installeren en mijn PATH-variabele instellen op de JDK?
in plaats van JRE?

Voor compilatie, installeer en configureer zeker de specifieke JDK die je wilt.

Voor runtime kun je degene gebruiken die bij de JDK of een zelfstandige JRE wordt geleverd, maar zorg er hoe dan ook voor dat je de juiste versies hebt geïnstalleerd en dat je je PATH zo hebt geconfigureerd dat er geen verrassingen zijn.

>

Wat is het verschil tussen de variabele PATH in JRE of JDK?

De omgevingsvariabele PATH vertelt de opdrachtshell waar de opdracht moet worden gezocht. Wanneer u javatypt, doorzoekt de opdrachtshell-interpreter alle locaties die zijn opgegeven in de variabele PATH, van links naar rechts, om de juiste javaruntime uitvoerbaar bestand om uit te voeren. Als je meerdere versies van Java hebt geïnstalleerd – dwz je hebt het uitvoerbare bestand javaop meerdere locaties gespecificeerd in de PATH-variabele, dan is de eerste die je tegenkomt als je van links naar rechts gaat, degene die wordt uitgevoerd.

De compileropdracht is javacen wordt alleen geleverd met de JDK. De runtime-opdracht is javaen wordt geleverd met de JDK en bevindt zich in de JRE.

Het is waarschijnlijk dat je één versie (51.0 = Java 7) van javachebt geïnstalleerd en dat je dezelfde versie van javahebt geïnstalleerd, maar dat een andere eerdere versie van javaverschijnt eerder in het PATH en wordt dus aangeroepen in plaats van degene die u verwacht.


Antwoord 21

Ik had dit probleem toen ik terugging naar Java 6 en probeerde klassen uit te voeren die eerder waren gecompileerd met Java 7. Wat voor mij werkte, was Preferences > java > compiler –> stel nalevingsniveau in op 1.6 en cruciaal “projectinstellingen configureren”.


Antwoord 22

Vandaag verscheen deze foutmelding in onze Tomcat7 op Ubuntu 12.04.2 LTS(Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
8 apr. 2014 09:00:55 org.apache.catalina.core.StandardContextfilterStart
ERNSTIG: Uitzondering startfiltersteunen2
java.lang.UnsupportedClassVersionError: controller/ReqAccept: niet-ondersteunde major.minor-versie 51.0 (kan klassecontroller.ReqAccept niet laden)

De Struts-applicatie is gecompileerd met Java 7.

Het bleek dat iemand “service tomcat [stop/start]” gebruikt om Tomcat 7 opnieuw op te starten,

$ ps -ef | grep java
tomcat7 31783 1 32 20:13 ? 00:00:03 /usr/lib/jvm/default-java/bin/java…
$ /usr/lib/jvm/default-java/bin/java -version
java-versie “1.6.0_27”

Dat veroorzaakt de fout “Niet-ondersteunde major.minor versie 51.0”.

Toen we “/etc/init.d/tomcat7 [stop/start]” gebruikten om Tomcat 7 opnieuw op te starten, was het probleem opgelost.

$ ps -ef | grep java
tomcat7 31886 1 80 20:24 ? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -versie
java-versie “1.7.0_15”


Antwoord 23

Ik heb het opgelost. Ik rende:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

De fout is misleidend, Unsupported major.minor version 51.0. Dit wekt de indruk dat versie 51 (Java 7) niet wordt ondersteund. En we zouden Java 6 moeten gebruiken.

De fout had moeten zijn:

De huidige Java-versie, 50, wordt niet ondersteund. Gebruik in plaats daarvan Java versie 7 (51:0 en hoger).`


Antwoord 24

Uw Java-bestand is gecompileerd met een andere versie (hogere compilerversie) dan de versie (lagere runtimeversie) waarmee u het probeert uit te voeren.

Het is een basisbegrip dat klassen die zijn gecompileerd met lagere versies, naar verwachting zullen worden uitgevoerd in de latere hogere versies. Maar het tegenovergestelde (gecompileerd met een hogere compilerversie en proberen om het uit te voeren met een lagere runtime-versie) is soms helemaal niet mogelijk.

Daarom krijgt u deze foutmelding te zien wanneer u probeert uw programma uit te voeren. Niet-ondersteunde major.minor-versie x.x

V:ik heb een applicatie gemaakt in Java 7, maar wanneer mijn gebruikers proberen om
uitvoeren, krijgen ze een niet-ondersteunde major.minor versie 51.0-fout. Wat
betekent dit en wat kan ik eraan doen?

A:Als u een toepassing compileert met javac in Java 7, zullen de resulterende klassenbestanden het 51.0-versienummer hebben. versies van
Java ouder dan 7 herkent dit nummer niet, dus uw gebruikers hebben:
om te upgraden naar Java 7 voordat u uw toepassing uitvoert. Als jij het niet bent
met behulp van alle Java 7 API’s die u kunt proberen om uw toepassing te compileren met
javac -target 1.6 om een 1.6-compatibel klassenbestand te maken. Als jouw
applicatie wordt geïmplementeerd met behulp van webstart, u kunt het minimum opgeven
versie vereist. Zie voor meer informatie de documenten op Java Web Start
en JNLP hier. Dit probleem verdwijnt zodra we autoupdate activeren om
Java 7 voor eindgebruikers die momenteel Java 6 op hun desktop hebben. De
tijdlijn hiervoor is nog niet bepaald, we willen ontwikkelaars geven
tijd om eerst eventuele problemen tussen hun code en JDK 7 op te lossen.

(Bron: oracle.com.)


Antwoord 25

O, Mac OS X, ik heb dit probleem kunnen oplossen door de variabele JAVA_HOME in te stellen:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home

Antwoord 26

Laten we eerst een paar basisprincipes goed krijgen…

JRE is een onderdeel van NetBeans/Eclipse/standalone die u bibliotheken, JVM, Java-plug-ins & Java-webstart. Merk op dat het geen compliers of debuggers biedt.

JDK is de superset van JRE, samen met compliers en debuggers.

Dus als je je standaardbibliotheek hebt als een JRE in plaats van JDK, zul je veel plezier beleven aan het importeren van dingen, maar het compileert niet.

Stel in plaats daarvan je pad in op JDK (ik gebruik NetBeans en ik stel ze in met netbeans.conf in netbeans/etc/netbeans.conf en wijzig het pad).


Antwoord 27

In mijn geval zat het probleem in de runtime-configuratie van de server:

Server Runtime Environment

Controleer of de JRE de versie is die u nodig hebt:

voer hier de afbeeldingsbeschrijving in

Het project bevond zich in versie 1.7 en de server JRE was ingesteld op 1.6, na het wijzigen naar de juiste Java-versie is het goed gestart.


Antwoord 28

Ik had het probleem waarbij ik een Maven-compilatie op mijn project moest uitvoeren vanaf de opdrachtregel om mijn unit-tests uit te voeren; als ik een wijziging aanbracht in de testklasse en Eclipse deze automatisch opnieuw liet compileren, kreeg ik de foutmelding “Niet-ondersteunde major.minor-versie 51.0”.

Ik heb zowel JDK6 als JDK7 geïnstalleerd, maar al mijn JRE-instellingen wezen naar 1.6, zowel in de pom als op de pagina met projecteigenschappen in Eclipse. Geen enkele hoeveelheid Maven Update Project en/of verversing heeft dit opgelost.

Eindelijk probeerde ik het project te sluiten en opnieuw te openen, en dit leek het probleem op te lossen! HTH


Antwoord 29

U hebt uw Java-klasse gecompileerd met JDK 7 en u probeert dezelfde klasse uit te voeren op JDK 6 .


Antwoord 30

  • Installeer JDK 7.0.55 en stel Java in voor Eclipsevoor JDK 7.0 .55.
  • Bouw het project met JDK 7.0.55 door te configureren op buildpad JDK 7.0.55.
  • Stel de compiler in Eclipse voor JDK 7.0.55 in via menu Windows-> Voorkeuren-> Java-> Compiler– kies 1.7.

Other episodes