it-swarm.com.de

So beheben Sie Java.lang.UnsupportedClassVersionError: Nicht unterstützte Hauptversion

Ich versuche, Notepad ++ als All-in-One-Tool zum Bearbeiten, Ausführen, Kompilieren usw. zu verwenden.

Ich habe JRE installiert und meine Pfadvariable im Verzeichnis .../bin eingerichtet.

Wenn ich meine "Hallo Welt" in Notepad ++ starte, erhalte ich folgende Meldung:

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)
       .........................................

Ich denke, das Problem ist hier um Versionen. Einige Java-Versionen können alt oder zu neu sein.

  1. Wie kann ich das beheben?
  2. Sollte ich das JDK installieren und meine Pfadvariable anstelle von JRE auf das JDK einstellen?
  3. Was ist der Unterschied zwischen der Variable PATH in JRE oder JDK?
1464
ERJAN

Die angezeigte Versionsnummer beschreibt die Version der JRE, mit der die Klassendatei kompatibel ist.

Die gemeldeten Hauptzahlen sind:

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

(Quelle: Wikipedia )

Um das tatsächliche Problem zu beheben, sollten Sie versuchen, den Java-Code entweder mit einer neueren Version von Java JRE auszuführen oder den Zielparameter für den Java-Compiler anzugeben, um den Compiler anzuweisen, mit früheren Java-Versionen kompatiblen Code zu erstellen. 

Um beispielsweise Klassendateien zu generieren, die mit Java 1.4 kompatibel sind, verwenden Sie die folgende Befehlszeile:

javac -target 1.4 HelloWorld.Java

Bei neueren Versionen des Java-Compilers erhalten Sie wahrscheinlich eine Warnung, dass der Pfad der Bootstrap-Klasse nicht festgelegt ist. Weitere Informationen zu diesem Fehler finden Sie im Blogbeitrag Neue Javac-Warnung zum Festlegen einer älteren Quelle ohne Bootclasspath.

1843
Juha Palomäki

Java.lang.UnsupportedClassVersionError geschieht aufgrund einer höheren JDK während der Kompilierzeit und einer niedrigeren JDK zur Laufzeit.

342
Vivek Kumar Ray

In Eclipse ging ich einfach zum Menübefehl Window -> Preferences -> Java -> Compiler und setzte dann "Compiler Compliance Level" auf 1,6.

114
Cacovsky

Keine Sorge, ich habe es gelöst.

Es ist eigentlich ganz einfach - Sie müssen BOTH JRE/JDK mit derselben Version installieren.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

Und so weiter.

58
ERJAN

Dieser Fehler bedeutet, dass Sie versuchen, eine Java-Klassendatei zu laden, die mit einer neueren Java-Version kompiliert wurde, als Sie installiert haben.

Beispielsweise könnte Ihre .class-Datei für JDK 7 kompiliert worden sein, und Sie versuchen, sie mit JDK 6 auszuführen.

Die Lösung ist also entweder:

  • Aktualisieren Sie Ihre Java-Laufzeitumgebung oder
  • Kompilieren Sie die Klasse erneut, wenn Sie über die Quelle verfügen, und verwenden Sie dabei Ihren lokalen Java-Compiler (falls vorhanden). 

    javac Dateiname.Java

Für Entwickler kann dies passieren, wenn ein anderer Entwickler eine .class-Datei eincheckt und eine neuere Java-Version als Sie hat!

41
Brad Parks

Sie versuchen, Ihr Programm mit einer Java-Version auszuführen, die die Version nicht unterstützt, in der der Code kompiliert wurde. Also müssen Sie Ihren Code im Grunde mit einer höheren Version kompiliert haben und versuchen, ihn mit einer niedrigeren Version auszuführen.

Wie Sie bekommen

Unsupported major.minor version 51.0

und version 51.0 entspricht J2SE 7 Sie haben Ihren Code höchstwahrscheinlich in Java 7 kompiliert und versucht, ihn mit einer niedrigeren Version auszuführen. Überprüfen Sie, was Java -version angezeigt wird. Es sollte die Java 7-Version sein. Falls nicht, nehmen Sie entsprechende Änderungen in PATH/Java_HOME vor. Oder Sie können mit derselben Version kompilieren, in der Sie den Code ausführen möchten. Wenn die Konfigurationen verwirrend sind, können Sie immer den absoluten Pfad /home/user/jdk1.7.0_11/bin/javac und /home/user/jdk1.7.0_11/bin/Java angeben.

22
Aniket Thakur

Ich hatte eine ähnliche Situation auf dem Mac und der folgende Prozess hat für mich funktioniert:

Geben Sie im Terminal ein

vi ~/.profile

Dann fügen Sie diese Zeile in die Datei ein und speichern Sie

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

die Version ist die auf Ihrem Computer, z. B. 1.7.0_25.

Verlassen Sie den Editor und geben Sie den folgenden Befehl ein, damit er wirksam wird

source ~/.profile 

Geben Sie dann Java-Version ein, um das Ergebnis zu überprüfen

Java -version 

Was ist .profile-Datei?

Die .profile-Datei ist eine versteckte Datei. Dies ist eine optionale Datei, die dem System mitteilt, welche Befehle ausgeführt werden sollen, wenn sich der Benutzer, dessen Profildatei es ist, anmeldet. Wenn mein Benutzername beispielsweise bruno ist und sich eine .profile-Datei in/Users/bruno/befindet, deren gesamten Inhalt wird während des Anmeldevorgangs ausgeführt.

Quelle: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-mit-command-aliases-and-profile--mac30515

18
Tony

Im Eclipse-Menü Window -> Preferences -> Java -> Compiler überprüfen Sie auch "Projektspezifische Einstellungen konfigurieren".

Wenn Sie immer noch einen Fehler mit derselben Java-Version haben: Versuchen Sie, den Build-Ordner Ihres Projekts manuell zu löschen. Starten Sie Eclipse anschließend neu.

16
Andreas L.

Das häufigste Problem ist die falsche Konfiguration Ihrer Java_HOME-Variablen, die auf die richtige Java Development Kit-Bibliothek verweisen sollte, wenn Sie mehrere installiert haben.

Führen Sie die folgenden Befehle aus, um herauszufinden, wo sich der SDK-Java-Ordner befindet:

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

Debian/Ubuntu

Um zu prüfen, welches Java (openjdk) Sie installiert haben, überprüfen Sie Folgendes:

dpkg -l "openjdk*" | grep ^i

oder:

update-Java-alternatives -l

Um es zu ändern, verwenden Sie:

update-alternatives --config Java

Präfix mit Sudo, falls erforderlich.

um die alternative Java-Version auszuwählen.

Oder prüfen Sie, welche für die Installation verfügbar sind:

apt-cache search ^openjdk

Präfix mit Sudo, falls erforderlich.

Dann können Sie zum Beispiel installieren:

apt-get install openjdk-7-jre

Präfix mit Sudo, falls erforderlich.

Fedora, Oracle Linux, Red Hat

Installieren/Aktualisieren des entsprechenden Pakets über:

yum install Java-1.7.0-openjdk Java-1.7.0-openjdk-devel

Das Java-1.7.0-openjdk-Paket enthält nur die Java-Laufzeitumgebung. Wenn Sie Java-Programme entwickeln möchten, installieren Sie das Paket Java-1.7.0-openjdk-devel.

BSD

In der FreeBSD Ports-Sammlung befindet sich ein OpenJDK 7-Paket mit dem Namen openjdk7 , das wahrscheinlich neu konfiguriert werden muss.

Siehe: OpenJDK-Wiki-Seite .

Windows

Installieren Sie einfach die entsprechende Java SE Development Kit-Bibliothek von der Oracle-Site oder installieren Sie sie 

Jenkins

Wenn dieses Problem mit Jenkins auftritt, lesen Sie:

Die Auswahl der richtigen Java-Version (neuer) mit update-alternatives sollte jedoch funktionieren.

14
kenorb

Sie können einige JAR-Bibliotheken in Java 7 kompilieren, und Sie haben nur Java 6 als Java Runtime. Bei einigen neuen Bibliotheken kann es passieren.

14
Rio

Ich hatte das gleiche Problem, als ich mit einem Ant - Skript an meiner Anwendung arbeitete.

Ich verwende Eclipse für meine Anwendungsentwicklung und änderte die Compilerversion in den Buildeigenschaften des Projekts. Aber das hat bei mir nicht funktioniert. Dann fand ich heraus, dass ich die Compiler-Version im Ant-Skript bereitstellen kann.

Ich habe das Ant-Skript in dem Abschnitt geändert, in dem es Java-Dateien kompiliert.

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

Dies funktionierte für mich, um das nicht unterstützte große kleinere Problem zu lösen.

12
Mandar Pandit

Ich hatte das gleiche Problem mit einem in 1.7 geschriebenen Projekt und habe versucht, es in 1.6 auszuführen.

Meine Lösung in Eclipse:

  • Klicken Sie mit der rechten Maustaste auf Ihr Projekt Eigenschaften -> Java-Erstellungspfad -> Bibliotheken .

  • Wählen Sie Ihre JRE-Systembibliothek aus und klicken Sie rechts auf Edit , und wählen Sie die Ziel-JRE aus.

  • Gehen Sie nun zu Java Compiler auf der linken Seite und ändern Sie den Compiler-Konformitätsgrad in Ihr Ziel. 

Das hat bei mir funktioniert.

12
Ben

Bei der Installation von JDK 1.7 wurde das Problem behoben.

12
user3168034

Wie von anderen Leuten an anderer Stelle beantwortet, wird das Java-Programm auf einer älteren Java-Version ausgeführt als der, für die es kompiliert wurde. Für die Abwärtskompatibilität muss es "crosscompiled" sein. Anders ausgedrückt: Es gibt ein Missverhältnis zwischen Quell- und Ziel-Java-Versionen.

Wenn Sie Optionen in Eclipse-Menüs ändern, wird das Originalposter nicht beantwortet, das angibt, dass Sie Eclipse nicht verwenden. Bei OpenJDK javac Version 1.7 können Sie für 1.6 crosscompile, wenn Sie die Parameter -source und -target verwenden und außerdem die Datei rt.jar - der Zielversion (dh der älteren Version) zur Kompilierzeit angeben. Wenn Sie die 1.6-JRE tatsächlich installieren, können Sie auf ihre Installation verweisen (z. B. /usr/lib/jvm/Java-6-openjdk-i386/jre/lib/rt.jar unter Ubuntu/usr/jdk/jdk1. Offensichtlich unter SunOS 6.0_60/jre/lib/rt.jar. Sorry, ich weiß nicht, wo es sich auf einem Windows-System befindet. So wie:

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

Es sieht so aus, als könnten Sie rt.jar einfach aus dem Internet herunterladen und darauf zeigen. Dies ist jedoch nicht zu elegant:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.Java
11
Mace Ojala

Basierend auf...

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

Klicken Sie in Eclipse mit der rechten Maustaste auf das Projekt im Paket-Explorer:

Erstellungspfad -> Erstellungspfad konfigurieren

Unter:

Java Build Path -> Bibliotheken -> Bibliothek hinzufügen -> JRE System Library -> Installierte JREs -> Suche .

Fügen Sie die erforderliche JRE hinzu, indem Sie die Bibliothek in der Liste auswählen, die nach Abschluss der Suche verfügbar ist.

10
Adit Ya
  • Wenn Sie Maven verwenden, legen Sie Ihre Java-Kompilierstufe fest. Öffnen Sie eine Befehlszeile und schreiben Sie Java -version für Ihre Kompilierstufe:

     Enter image description here

  • Wenn Sie IntelliJ IDEA verwenden, wählen Sie Projekt → DateiEinstellungenBuild Execution DeploymentCompilerJava-Compiler. Dann ändern Sie den Bytecode als 1.7 wie dieses Bild:

     Enter image description here

10
ethemsulan

Wenn Sie dieses Problem bei der Verwendung von Maven haben, können Sie den Code mithilfe des Plug-Ins Maven Compiler kompilieren.

 <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: Setzen Sie source und target auf 1.8, wenn Sie JDK 8 verwenden.

9
Thamme Gowda

Wie kann ich das beheben?

Dieser Fehler bedeutet, dass die JRE, die zur Ausführung Ihres Klassencodes verwendet wird, die verwendete Java-Version nicht erkennt. Normalerweise, weil die Java-Version, die Ihre Klassendatei generiert hat (d. H. Kompiliert), neuer ist.

Um dies zu beheben, können Sie entweder 

a) Kompilieren Sie Ihre Java-Quellen mit derselben oder einer älteren Version des Java-Compilers, die für die Ausführung verwendet wird. Installieren Sie das entsprechende JDK.

b) Kompilieren Sie Ihre Java-Quellen mit der neueren Version des Java-Compilers, jedoch im Kompatibilitätsmodus. Verwenden Sie den -target-Parameter.

c) Führen Sie Ihre kompilierten Klassen in einer JRE aus, die dieselbe oder eine neuere Version wie das JDK ist, das zum Kompilieren der Klassen verwendet wurde.

Sie können die derzeit verwendeten Versionen mit javac -version für den Compiler und Java -version für die Laufzeit überprüfen.

Sollte ich das JDK installieren und meine PATH-Variable im JDK .__ einrichten. anstelle von JRE?

Zum Kompilieren installieren und konfigurieren Sie das von Ihnen gewünschte JDK.

Zur Laufzeit können Sie die im Lieferumfang des JDK oder einer eigenständigen JRE enthaltene Version verwenden. Stellen Sie jedoch sicher, dass Sie die richtigen Versionen installiert haben und dass Sie Ihren PATH so konfiguriert haben, dass keine Überraschungen auftreten.

Was ist der Unterschied zwischen der PATH-Variablen in JRE oder JDK?

Die Umgebungsvariable PATH teilt der Befehls-Shell mit, wo sie nach dem eingegebenen Befehl suchen soll. Wenn Sie Java eingeben, durchsucht der Befehl Shell-Interpreter alle in der Variablen PATH angegebenen Positionen von links nach rechts, um die entsprechende ausführbare Java-Laufzeitdatei zu finden. Wenn Sie mehrere Java-Versionen installiert haben, d. H. Sie haben die ausführbare Datei Java an mehreren Speicherorten in der Variablen PATH angegeben, wird beim Ausführen von links nach rechts diejenige ausgeführt, die ausgeführt wird.

Der Compilerbefehl ist javac und wird nur mit dem JDK geliefert. Der Laufzeitbefehl ist Java und wird mit dem JDK geliefert und befindet sich in der JRE.

Es ist wahrscheinlich, dass Sie eine Version (51.0 = Java 7) von javac installiert haben und dass Sie dieselbe Version von Java installiert haben. Eine frühere Version von Java erscheint jedoch früher im PATH und wird daher anstelle von aufgerufen eine, die du erwartest.

8
Vihung

Ich hatte dieselbe Fehlermeldung, als ich Ant von Eclipse aus ausführte, aber die anderen hier genannten Lösungen lösten mein Problem nicht. Die lustige Sache war, dass Ant von der Windows-Befehlszeile aus gut laufen konnte. Es musste also ein Konfigurationsproblem in Eclipse geben.

Es stellte sich heraus, dass Sie unter Eclipse die Umgebung angeben können, in der Ant ausgeführt werden soll. Diese Einstellung wurde als JRE anstelle eines JDK festgelegt.

  • Gehen Sie zu: Ausführen -> Externe Tools -> Externe Tools-Konfigurationen ...
  • Wählen Sie die Ant build.xml für Ihr Projekt aus (wenn Sie mehrere Projekte haben)
  • Aktiviere den Tab "JRE"
  • Hier wurde 'Separate JRE: jre6' ausgewählt. Als ich dies in ein JDK aus der 1.6- oder 1.7-Serie geändert habe, war der Fehler weg.
8
ckielstra

Sie haben eine höhere Version des JDK verwendet, um zu kompilieren und von einer niedrigeren Version von JDK / JRE auszuführen.

Um dies zu überprüfen, lesen Sie die Versionsinformationen:

javac -version

Java -version

Sie werden unterschiedlich sein und Javac wird eine höhere Versionsnummer haben.

Um dies zu umgehen, führen Sie Java mit der JDK-Version aus oder verwenden Sie eine neuere JRE/JDK, die ebenfalls funktioniert.

which javac teilt Ihnen den Ort mit, beispielsweise /usr/bin/javac. Führen Sie einfach direkt mit /usr/bin/Java <program> aus.

ODER Sie können die Umgebungsvariable als permanente Lösung festlegen.

7
L Lawliet

Ich habe es gelöst Ich rannte:

Java_HOME=/usr/lib/jvm/Java-7-openjdk-i386

Der Fehler ist irreführend, Unsupported major.minor version 51.0. Dies vermittelt den Eindruck, dass Version 51 (Java 7) nicht unterstützt wird. Und wir sollten Java 6 verwenden.

Der Fehler hätte sein sollen:

Die aktuelle Java-Version 50 wird nicht unterstützt. Verwenden Sie stattdessen Java-Version 7 (51: 0 und höher)

6
Siddharth

Ihre Java-Datei wird mit einer anderen Version (höhere Compilerversion) als der Version (niedrigere Laufzeitversion) erstellt, mit der Sie sie ausführen möchten.

Es ist grundlegend zu verstehen, dass Klassen, die mit niedrigeren Versionen kompiliert wurden, voraussichtlich in den späteren höheren Versionen ausgeführt werden. Das Gegenteil (mit einer höheren Compiler-Version kompiliert und versucht, sie mit einer niedrigeren Laufzeitversion auszuführen) ist manchmal nicht möglich.

Daher wird Ihnen dieser Fehler angezeigt, wenn Sie versuchen, Ihr Programm auszuführen. Nicht unterstützte Major-Minor-Version x.x

Q: Ich habe eine Anwendung in Java 7 erstellt, aber wenn meine Benutzer versuchen, Wenn Sie es ausführen, erhalten Sie die Fehlermeldung Nicht unterstützt Major.Minor Version 51.0. Was bedeutet das und was kann ich dagegen tun?

A: Wenn Sie eine Anwendung mit Java in Java 7 kompilieren, erhalten die resultierenden Klassendateien die Versionsnummer 51.0. Versionen von Java vor 7 erkennt diese Nummer nicht, sodass Ihre Benutzer über .__ verfügen. ein Upgrade auf Java 7 durchführen, bevor Sie Ihre Anwendung ausführen. Wenn Sie nicht Sie können mit beliebigen Java 7-APIs versuchen, Ihre Anwendung mit .__ zu kompilieren. javac -target 1.6 zum Erstellen einer 1.6-kompatiblen Klassendatei. Wenn dein Die Anwendung wird mithilfe von Webstart bereitgestellt. Sie können das Minimum angeben Version erforderlich. Weitere Informationen finden Sie in den Dokumenten zu Java Web Start und JNLP hier. Dieses Problem wird behoben, sobald Sie die automatische Aktualisierung auf .__ auslösen. Java 7 für Endbenutzer, die aktuell Java 6 auf ihren Desktops verwenden. Das Zeitplan dafür ist noch nicht festgelegt, wir wollen den Entwicklern Zeit, um alle Probleme zwischen ihrem Code und JDK 7 zuerst herauszufinden.

(Quelle: Oracle.com .)

6
Manohar

Hatte dieses Problem, als ich zu Java 6 zurückkehrte und versuchte, Klassen auszuführen, die zuvor mit Java 7 kompiliert wurden. 

6
user3534268

Heute erschien diese Fehlermeldung in Tomcat 7 auf Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/Tomcat7/localhost.2014-04-08.log: 
8. April 2014 9:00:55 AM org.Apache.catalina.core.StandardContext filterStart 
SEVERE: Ausnahme beim Starten von filter struts2 
Java.lang.UnsupportedClassVersionError: controller/ReqAccept: Nicht unterstützte major.minor-Version 51.0 (Klassencontroller kann nicht geladen werden. ReqAccept)

Die Anwendung Struts wird mit Java 7 kompiliert.

Es stellte sich heraus, dass jemand "Service Tomcat [Stopp/Start]" verwendet, um Tomcat 7 neu zu 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-Version "1.6.0_27"

Was den Fehler "Unsupported major.minor version 51.0" verursacht.

Als wir Tomcat 7 mit "/etc/init.d/Tomcat7 [stop/start]" neu starteten, war das Problem behoben.

$ 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 -version
Java-Version "1.7.0_15"

6
oraclesoon

Oh Mac OS X Ich konnte dieses Problem lösen, indem ich die Java_HOME-Variable setzte:

export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
5
TomTom

Zuerst lassen Sie uns einige Grundlagen richtig stellen ...

JRE ist eine Komponente in NetBeans / Eclipse / Standalone, die Sie mit Bibliotheken, JVM, Java Plugins und Java Web Start versorgen wird. Beachten Sie, dass es keine Kompatibilitäten oder Debugger bereitstellt.

JDK ist die Obermenge von JRE zusammen mit Komplikatoren und Debuggern.

Wenn Sie also Ihre Standardbibliothek als JRE anstelle von JDK verwenden, werden Sie eine schöne Zeit zum Importieren von Daten haben, die jedoch nicht kompiliert werden kann.

Legen Sie stattdessen Ihren Pfad auf JDK fest (ich verwende NetBeans und setze sie mit netbeans.conf in netbeans/etc/netbeans.conf und ändere den Pfad).

4
  • Installieren Sie JDK 7.0.55 und legen Sie Java für Eclipse für JDK 7.0.55 fest.
  • Erstellen Sie das Projekt mit JDK 7.0.55, indem Sie für Buildpfad JDK 7.0.55 konfigurieren.
  • Stellen Sie den Compiler in Eclipse für JDK 7.0.55 ein, indem Sie das Menü Windows -> Preferences -> Java -> Compiler wählen.
3
siddmuk2005

In meinem Fall lag das Problem in der Server-Laufzeitkonfiguration:

 Server Runtime Environment

Überprüfen Sie, ob die JRE die Version ist, die Sie benötigen:

 enter image description here

Das Projekt war in Version 1.7 und der Server-JRE wurde auf 1.6 gesetzt, nachdem auf die richtige Java-Version gewechselt wurde, die ordnungsgemäß gestartet wurde.

3
Mike-Bell

Ich hatte das Problem, dass ich eine Maven-Kompilierung für mein Projekt von der Befehlszeile aus ausführen musste, um meine Komponententests auszuführen. Wenn ich eine Änderung an der Testklasse vorgenommen habe und Eclipse es automatisch neu kompilieren ließ, wurde die Fehlermeldung "Unsupported major.minor version 51.0" angezeigt.

Ich habe sowohl JDK6 als auch JDK7 installiert, aber alle meine JRE-Einstellungen zeigten auf 1,6, sowohl im Pom als auch auf der Projekteigenschaften-Seite in Eclipse. Dies wurde nicht durch Maven Update Project und/oder Aktualisierung behoben.

Schließlich habe ich versucht, das Projekt zu schließen und es wieder zu öffnen, und dies schien es zu beheben. HTH

3
Matthew Wise

Sie haben Ihre Java-Klasse mit JDK 7 kompiliert und versuchen, dieselbe Klasse unter JDK 6 auszuführen.

3
Sagar Varpe

Die Antwort ist für das Problem:

Ausnahme im Thread "main" Java.lang.UnsupportedClassVersionError: edu/stevens/cs549/dhts/main/LocalContext: Nicht unterstützte major.minor-Version 52.0

Ich hatte das gleiche Problem. Für diejenigen, die in AWS ec2-Instanzen dieses Problem hatten und irgendwie auf diese Frage weitergeleitet wurden. Ich antworte für diese Fragen und möchte gerne mitteilen, wie ich es getan habe ... Ich hatte Probleme, weil Amazon EC2-Instanzen Java Version 1.7 ausführten und vielleicht war mein Projekt nicht damit kompatibel, da ich Maven und es verwendete Art vorkonfiguriert für Java 1.8 ..__ Also habe ich eine neue Version von Java installiert:

Sudo yum -y install Java-1.8.0

Und dann ist es wichtig, die ältere Version zu entfernen:

Sudo yum remove Java-1.7.0-openjdk

Denken Sie daran, sie nach der Installation der neuen Version zu löschen, andernfalls würde sie ständig dieselbe ältere Version verwenden. Ich hoffe, dass Ihr Problem dadurch gelöst wird, was in meinem Fall der Fall war.

Ich bin mit dem gleichen Problem konfrontiert und habe es in Linux behoben.

Überprüfen Sie Ihren $Java_HOME

Sie benötigen JDK 1.8, um APK zu kompilieren/zu erstellen

Installieren Sie Java JDK 1.8 und ändern Sie den Java_HOME.

Bearbeiten Sie ~/.bashrc und fügen Sie Ihren JDK 1.8-Pfad als Java_HOME hinzu.

export Java_HOME=/usr/lib/jvm/Java-8-Oracle/jre/

Und source ~/.bashrc

Schließen Sie das aktuelle Terminalfenster/die Registerkarte und führen Sie $Java_HOME aus, um den Pfad zu überprüfen.

1
Mohammed Safeer

Seit Java 9 wird -target durch --release ersetzt.

Bis Java 11 sind die verfügbaren Nummern für --release67, 8, 9, 10, 11.
Und Sie können vermuten, dass die zukünftigen Versionen 12, 13 sind und weitergehen.

So kompilieren Sie für ein älteres Ziel-Jvm:

javac --release 7 Tmp.Java/ Dies generiert eine .class-Datei, die unter jvm> = 7 ausgeführt werden kann.

Dann können Sie die Zielversion überprüfen:

javap -v Tmp | grep version

in der Ausgabe gibt major version die Zielversion von jvm an.

  • 55 -> Java 11
  • 54 -> Java 10
  • 53 -> Java 9
  • 52 -> Java 8
  • 51 -> Java 7
  • 50 -> Java 6

In der zukünftigen Version werden weitere ältere Versionen entfernt:

  • Ab Java 11 werden Hauptversionen <= 49 _/(Java-Version <= 5) nicht unterstützt.
  • Ab Java 12 und 13 werden Hauptversionen <= 50 (Java-Version <= 6) nicht unterstützt.

Welche Zielversionen von javac unterstützt werden, können Sie über den Befehl ermitteln:
javac -help | grep releases

1
Eric Wang

Eine weitere Möglichkeit, dies unter Mac OS X mit Homebrew zu beheben, ist folgende:

brew install Caskroom/cask/Java
1
webtweakers

Ich hatte die gleiche Situation, aber einer der oben genannten Tipps hat nicht geholfen :) In unserer Umgebung liefen Tomcat als Dienst unter Windows. Wir haben Java 1.7 installiert und Java_HOME in dieser Version eingerichtet. Natürlich wurden die Quellen auf Java 1.7 erstellt. Trotzdem sagte der Tomcat, dass er frühere JVM-Versionen verwendete. Nach einer gründlichen Analyse stellte sich heraus, dass der unter Windows installierte Tomcat-Dienst den alten Wert für Java_HOME beibehalten hat, der auf Java 1.6 verweist. Nach der Installation des neuen Tomcat-Dienstes wurde alles behoben .. So lautet die Schlussfolgerung: Wenn Sie die Java-Version ändern und Tomcat als Dienst ausführen, müssen Sie den Tomcat-Dienst neu installieren.

0
mariusz117

Ich habe das gleiche Problem mit Spring Source Tool (STS) IDE für ein Grails -Projekt erhalten. Ich habe die installierte Java-Version überprüft und die Java-Version des Projekts war 1.7. *. Später fand ich heraus, dass in der Datei GGTS.ini die Java-Version auf 1.6 eingestellt war:

Lösung:

-Dosgi.requiredJavaVersion = 1.6 geändert in
- Dosgi.requiredJavaVersion = 1.7
Fügen Sie vor -vmargs zwei Zeilen ein
- vm
jdk1.7.0_21/jre/lib/AMD64/server/libjvm.so

Problem gelöst. Glückliche Kodierung.

0
Bhuwan Gautam

Wenn Sie ein zweites Projekt zu Ihrem Build-Pfad hinzugefügt haben, stellen Sie sicher, dass es die gleiche Compiler-Version als Ihr erstes Projekt hat: Eigenschaften -> Java-Compiler -> Compiler-Konformitätsstufe

0
Luigi04
  1. Klicken Sie in einem Projekt auf Eigenschaften.
  2. Gehen Sie zu Java Build Path.
  3. Klicken Sie auf Bibliothek hinzufügen.
  4. Klicken Sie in der JRE-Systembibliothek auf Weiter. Wählen Sie die gewünschte aus, falls nicht standardmäßig ausgewählt.
  5. Klicken Sie auf Fertig stellen.

Sie sind fertig!

0
AmazingDayToday

Ich habe alles versucht. Die Neuinstallation von Tomcat hat letztendlich funktioniert. Folgendes habe ich vor der Neuinstallation geprüft.

Stellen Sie sicher, dass Ihre Umgebungsvariablen so aussehen. 

$ echo $Java_HOME
C:\Program Files\Java\jdk1.7.0_51\
$ echo $JRE_HOME
C:\Program Files\Java\jdk1.7.0_51\jre\bin

Stellen Sie sicher, dass Eclipse dieselbe Jre verwendet, für die Sie Java_HOME festgelegt haben (wenn Java_HOME nicht festgelegt ist, wird JRE_HOME angezeigt). Window > Prefrences > Java > Installed JREs (der geprüfte ist der Standardwert)

Wenn Sie an einer Ihrer Tomcat-Dateien Änderungen vorgenommen haben, insbesondere an catalina.bat oder startup.bat, können Sie Tomcat anweisen, eine andere Java-Version zu betrachten, als die, die Sie auf Java_HOME C:\Program Files (x86)\Apache\apache-Tomcat-7.0.26\bin gesetzt haben.

0
Philip Rego

stellen Sie sicher, dass Sie die Versionen der Java-Versionen der Umgebungsvariablen überprüfen. Dies kann nur der Unterschied zwischen den Versionen von Java_HOME (JDK-Pfad) und JRE_HOME (JRE-Pfad) sein, die das Problem verursachen

0

Ich habe diese Fehlermeldung für die Klasse com/Sun/javadoc/Doclet erhalten. Nach einigem Graben habe ich festgestellt, dass ich tools.jar aus Java 8 versehentlich in meinen Java 7-Ordner kopiert habe.

Den tools.jar für Java 7 zu finden und ihn wieder in den Ordner zu legen, beseitigte mein Problem. Also etwas zu probieren.

0
snowfi6916

Fügen Sie dies der Datei pom.xml hinzu:

<project ....>
    <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
</project>

Dabei ist 1.7 die Java-Version, die Sie verwenden möchten. Dadurch wird die Einstellung des Maven - Compilers überschrieben.

0
George

Ich habe dieses Problem für mich gelöst, indem ich überprüfte, ob Maven-Abhängigkeiten in Deployment Assembly bereitgestellt wurden. In meinem Fall waren sie nicht. 

Durch das Hinzufügen wurde das Problem behoben.

0
antonkronaj

Ich verwende OS X 10.11.5 (El Capitan) und versuchte, Java_HOME einzustellen und die "richtige" Java-Version über Maven zu erzwingen. Nichts hat geholfen.

Das Problem trat auf, wenn das OS X-Konto abgemeldet wurde, während die Anwendung noch lief. Nach dem erneuten Anmelden öffnete OS X die alte Terminalsitzung mit ausgegrautem Verlauf. Ich habe dieselbe Terminalsitzung zum Erstellen des Projekts verwendet, schlug jedoch mit dem nicht unterstützten Klassenversionsfehler fehl.

Die Reinigung des Maven-Projekts hat überhaupt nicht geholfen.

Um das Problem zu lösen, musste ich einfach das automatisch geöffnete Terminalfenster schließen und ein neues verwenden.

0
lilalinux

In meinem Fall trat das Problem aufgrund unterschiedlicher Versionen von Java in $ Java_HOME und $ PATH auf.

echo $Java_HOME
/usr/lib/jvm/Java-7-openjdk-AMD64/jre
echo $PATH
/opt/jdk/jdk1.8.0_151/bin:/usr/lib/jvm/Java-7-openjdk-AMD64/jre/bin:/usr/local/bin:/usr/bin:/bin

Nachdem ich sie auf die gleiche Version von Java aktualisiert hatte, war das Problem behoben.

export Java_HOME=/opt/jdk/jdk1.8.0_151
export PATH=$Java_HOME/bin:$PATH
0
nurb

Wie Sie wissen, ist es immer ratsam, die Umgebungsvariable Java_home für das bin-Verzeichnis von jdk (Java Development Kit) zu verwenden.

wenn Sie sich Ihr Problem weiter oben ansehen, scheint die JRE-Laufzeitumgebung nach einer Klasse zu suchen, die in der Superset-Bibliothek von JDk nicht kompatibel ist. Ich würde empfehlen, ein vollständiges Paket von JDK und JRE oder Jboss (falls erforderlich) direkt von der Oracle-Downloadquelle herunterzuladen, um solche Probleme zu vermeiden.

0
Rahul Mishra

Ich habe das gleiche Problem, und ich habe dieses Problem mit dieser Lösung auf einem Mac behoben. Ich hoffe es hilft jemandem. Dies liegt daran, dass das System die neuere Version von JDK nicht kennt und immer noch auf die alte JDK verweist.

0
Dilip Rajkumar

sie können das "Ziel" für den Compiler in der Datei build.xml angeben, wenn Sie ant verwenden, wie folgt:

 <target name="compile" depends="init">
    <javac executable="${Java_HOME}\bin\javac" srcdir="${src.dir}" target="1.6" destdir="${classes.dir}" debug="true"
        deprecation="true" classpathref="compile.classpath" encoding="utf8">
        <include name="**/*.Java" />
    </javac>
</target>
0
StrongYoung