java.lang.UnsupportedClassVersionError: Onjuist versienummer in .class-bestand?

Ik krijg deze foutmelding wanneer ik een opensource-bibliotheek opneem die ik uit de broncode moest compileren. Nu geven alle suggesties op het web aan dat de code in de ene versie is gecompileerd en in een andere versie is uitgevoerd (nieuw op oud). Ik heb echter maar één versie van JRE op mijn systeem. Als ik de opdrachten uitvoer:

$ javac -version
javac 1.5.0_18
$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

en controleer in Eclipse voor de eigenschappen van de java-bibliotheek, ik krijg 1.5.0_18

Daarom moet ik concluderen dat iets anders, intern in een klasse zelf, de uitzondering is?? Is dat zelfs mogelijk?


Antwoord 1, autoriteit 100%

Ik heb geleerd dat dit soort foutmeldingen meestal juist zijn. Wanneer het MOGELIJK (in uw gedachten) niet kan zijn wat de gerapporteerde fout zegt, gaat u op zoek naar een probleem in een ander gebied… om er uren later achter te komen dat de oorspronkelijke foutmelding inderdaad juist was.

Omdat je Eclipse gebruikt, denk ik dat Thilo het bij het rechte eind heeft. De meest waarschijnlijke reden dat je dit bericht krijgt, is omdat een van je projecten 1.6-klassen aan het compileren is. Het maakt niet uit of je maar een 1.5 JRE op het systeem hebt, want Eclipse heeft zijn eigen compiler (niet javac), en heeft alleen een 1.5 JRE nodig om 1.6 klassen te compileren.
Het is misschien raar en een instelling moet worden uitgeschakeld om dit toe te staan, maar het is me net gelukt.

Controleer voor het betreffende project de sectie Projecteigenschappen (meestal Alt+Enter), Java Compiler. Hier is een afbeelding van een project dat is geconfigureerd om 1.6 te compileren, maar met slechts een 1.5 JRE.

voer hier de afbeeldingsbeschrijving in


Antwoord 2, autoriteit 5%

Heb je geprobeerd een volledige “clean” uit te voeren en vervolgens opnieuw op te bouwen in Eclipse (Project->Clean…)?

Kunt u compileren en uitvoeren met “javac” en “java” rechtstreeks vanaf de opdrachtregel? Werkt dat goed?

Als u met de rechtermuisknop op uw project klikt, naar “Eigenschappen” gaat en vervolgens naar “Java Build Path”, zijn er verdachte items onder een van de tabbladen? Dit is in wezen uw CLASSPATH.

In de Eclipse-voorkeuren kunt u ook het gedeelte “Geïnstalleerde JRE’s” in het gedeelte “Java” controleren en ervoor zorgen dat het overeenkomt met wat u denkt dat het zou moeten doen.

Je hebt zeker of ergens een oud .class-bestand liggen of je krijgt een compile-time/run-time mismatch in de versies van Java die je gebruikt.


Antwoord 3, autoriteit 3%

Heb je gecompileerd met Eclipse? Het gebruikt een andere compiler (geen javac). Dat zou niet tot deze fout moeten leiden (als alles goed is geconfigureerd), maar u kunt in plaats daarvan proberen het met javac te compileren.

Als dat het probleem heeft opgelost, probeer dan te zien of Eclipse onjuiste compilerinstellingen heeft. Laat het specifiek Java 5 targeten.


Antwoord 4

Ik kreeg ook dezelfde fout. Reden daarvoor was ik het project aan het compileren met Maven. Ik had JAVA_HOME wijzend naar JDK7 en daarom werd java 1.7 gebruikt voor compilatie en bij het uitvoeren van het project gebruikte ik JDK1.5. Door het onderstaande item in het .classpath-bestand te wijzigen of de zonsverduistering zoals in de schermafbeelding te wijzigen, is het probleem opgelost.

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

of verander de uitvoeringsconfiguraties van eclipse as
voer hier de afbeeldingsbeschrijving in


Antwoord 5

Controleer ook eventuele jar-bestanden in uw project die zijn gecompileerd voor een hogere versie van Java. Als dit uw eigen bibliotheken zijn, kunt u dit oplossen door het kenmerk van de doelversie te wijzigen in javac

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">

Antwoord 6

Een ander scenario waarin dit kan gebeuren, is wanneer u een instantie van eclipse (voor debug enz.) start vanaf een host-eclips – in welk geval het niet helpt om het projectniveau of de JRE-bibliotheek op het klassenpad van het project alleen te wijzigen. Waar het om gaat is de JRE die wordt gebruikt om de doeleclipse-omgeving te starten.


Antwoord 7

Controleer ook altijd op voor de hand liggende. Ik kreeg deze fout een keer toen ik per ongeluk de verkeerde bron pakte voor de actie voor toevoegen en verwijderen van de server. Het kan gemakkelijk over het hoofd worden gezien.


Antwoord 8

Het verwijderen van de projectspecifieke instellingenbestanden (Eclipse-werkruimte/projectmap/.settings/) uit de projectmap is ook voldoende.
Het is duidelijk dat we een project moeten opschonen en bouwen na het verwijderen.


Antwoord 9

het project wijzigen om java 1.7 te gebruiken: Volg deze stappen om dit te laten werken:

  • Compiler-nalevingsniveau wijzigen
  • Verander uw projecten JRE/JDK naar iets van hetzelfde niveau (1,7 in mijn geval)
  • Doe dezelfde wijziging in alle projecten waarnaar door uw project wordt verwezen
  • Wijzig uw run/debug-configuratie om de JRE/JDK (of van hetzelfde niveau) te gebruiken

Werkt niet?

  • verwijder projecten Bin-map
  • Schoon
  • opnieuw bouwen

Werkt nog steeds niet?

in de directory van uw project: edit .settings/org.eclipse.jdt.core.prefs > zorg ervoor dat uw doelniveau wordt toegepast

Veel succes!


Antwoord 10

ik heb dit probleem opgelost door jre vereist voor server te wijzigen (in mijn geval is dat tomcat).
Dubbelklik op het tabblad Server in eclipse op de server (om de pagina voor serverconfiguratie te openen), klik op Runtime-omgeving en wijzig vervolgens JRE vereist

Other episodes