Ich versuche, Notepad ++ als All-in-One-Tool zum Bearbeiten, Ausführen, Kompilieren usw. zu verwenden.
Ich habe JRE installiert und meine Pfadvariable zum .../bin
Verzeichnis 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 hier sind Versionen; Einige Java-Versionen sind möglicherweise alt oder zu neu.
- Wie behebe ich das?
- Sollte ich das JDK installieren und meine Pfadvariable zum JDK anstelle von JRE einrichten?
- Was ist der Unterschied zwischen der
PATH
Variablen in JRE oder JDK?
Antworten:
Die angezeigte Versionsnummer beschreibt die Version der JRE, mit der die Klassendatei kompatibel ist.
Die gemeldeten Hauptzahlen sind:
(Quelle: Wikipedia )
Um das eigentliche Problem zu beheben, sollten Sie versuchen, entweder den Java-Code mit einer neueren Version von Java JRE auszuführen oder dem Java-Compiler den Zielparameter anzugeben, um den Compiler anzuweisen, Code zu erstellen, der mit früheren Java-Versionen kompatibel ist.
Verwenden Sie beispielsweise die folgende Befehlszeile, um mit Java 1.4 kompatible Klassendateien zu generieren:
Bei neueren Versionen des Java-Compilers wird wahrscheinlich eine Warnung angezeigt, dass der Pfad der Bootstrap-Klasse nicht festgelegt wurde. Weitere Informationen zu diesem Fehler finden Sie in einem Blogbeitrag. Neue Javac-Warnung zum Festlegen einer älteren Quelle ohne Bootklassenpfad .
quelle
java.lang.UnsupportedClassVersionError
Dies geschieht aufgrund eines höheren JDK während der Kompilierungszeit und eines niedrigeren JDK zur Laufzeit.quelle
/etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
) zu der Version, die für die Kompilierung mit Javac verwendet wurde, löste essudo update-alternatives --config java
um dies zu tun.In Eclipse ging ich einfach zum Menübefehl Fenster -> Einstellungen -> Java -> Compiler und setzte dann "Compiler-Konformitätsstufe" auf 1.6.
quelle
Mach dir keine Sorgen, ich habe es gelöst.
Es ist eigentlich einfach - Sie müssen BEIDE JRE / JDK mit derselben Version installieren.
JRE 6 -> JDK 6
JRE 7 -> JDK 7
Und so weiter.
quelle
Dieser Fehler bedeutet, dass Sie versuchen, eine Java-Klassendatei zu laden, die mit einer neueren Java-Version kompiliert wurde, als Sie installiert haben.
Beispielsweise
.class
könnte Ihre Datei für JDK 7 kompiliert worden sein, und Sie versuchen, sie mit JDK 6 auszuführen.Die Lösung lautet also entweder:
Kompilieren Sie die Klasse neu, wenn Sie über die Quelle verfügen, und verwenden Sie dabei Ihren lokalen Java-Compiler (falls vorhanden).
javac FileName.java
Für Entwickler kann dies passieren, wenn ein anderer Entwickler eine .class-Datei eincheckt und sie eine neuere Version von Java haben als Sie!
quelle
Sie versuchen, Ihr Programm mit einer Java-Version auszuführen, die die Version, in der der Code kompiliert wurde, nicht unterstützt. Grundsätzlich müssen Sie Ihren Code mit einer höheren Version kompiliert und versucht haben, ihn mit einer niedrigeren Version auszuführen.
Wie du wirst
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. Wenn nicht, nehmen Sie entsprechende Änderungen in PATH / JAVA_HOME vor. Oder Sie können mit derselben Version kompilieren, mit 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 angeben/home/user/jdk1.7.0_11/bin/java
.quelle
Ich hatte eine ähnliche Situation auf dem Mac und der folgende Prozess funktionierte für mich:
Geben Sie im Terminal Folgendes ein
Fügen Sie dann diese Zeile in die Datei ein und speichern Sie sie
Dabei ist die Version diejenige auf Ihrem Computer, z
1.7.0_25
.Beenden Sie den Editor und geben Sie den folgenden Befehl ein, damit er wirksam wird
Geben Sie dann java -version ein, um das Ergebnis zu überprüfen
Was ist eine
.profile
Datei?Quelle: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515
quelle
In Eclipse - Menü Fenster -> Einstellungen -> Java -> Compiler auch prüfen "Specific konfigurieren Projekteinstellungen".
Wenn Sie immer noch den Fehler mit derselben Java-Version haben: Versuchen Sie, den Build-Ordner Ihres Projekts manuell zu löschen. Starten Sie dann Eclipse neu.
quelle
Sie können eine JAR-Bibliothek in Java 7 kompilieren lassen, und Sie haben nur Java 6 als Java Runtime. Es könnte mit einigen neuen Bibliotheken passieren.
quelle
Das häufigste Problem ist eine Fehlkonfiguration 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:
Debian / Ubuntu
Um zu überprüfen, welches Java (openjdk) Sie installiert haben, überprüfen Sie über:
oder:
Verwenden Sie zum Ändern Folgendes:
sudo
Bei Bedarf Präfix mit .um die alternative Java-Version auszuwählen.
Oder überprüfen Sie, welche zur Installation verfügbar sind:
sudo
Bei Bedarf Präfix mit .Dann können Sie zum Beispiel installieren:
sudo
Bei Bedarf Präfix mit .Fedora, Oracle Linux, Red Hat
Installieren / aktualisieren Sie das entsprechende Paket über:
BSD
In der FreeBSD Ports-Auflistung befindet sich ein OpenJDK 7-Paket namens 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 bei Jenkins auftritt, lesen Sie:
Die Auswahl der richtigen Version von Java (neuer)
update-alternatives
sollte jedoch funktionieren.quelle
Ich hatte das gleiche Problem, als ich mit einem Ant- Skript arbeitete, um meine Anwendung zu erstellen.
Ich verwende Eclipse für meine Anwendungsentwicklung und habe die Compilerversion in den Build-Eigenschaften des Projekts geändert. Aber das hat bei mir nicht funktioniert. Dann fand ich heraus, dass ich die Compilerversion im Ant-Skript bereitstellen kann.
Ich habe das Ant-Skript in dem Abschnitt geändert, in dem Java-Dateien kompiliert werden.
Dies hat bei mir funktioniert, um das nicht unterstützte Hauptproblem zu lösen.
quelle
Als ich JDK 1.7 installiert habe , wurde das Problem behoben.
quelle
Ich habe das gleiche Problem mit einem in 1.7 geschriebenen Projekt und versucht, es in 1.6 auszuführen.
Meine Lösung in Eclipse:
Klicken Sie mit der rechten Maustaste auf Ihre Projekteigenschaften -> Java-Erstellungspfad -> Bibliotheken
Wählen Sie Ihre JRE-Systembibliothek aus, klicken Sie rechts auf Bearbeiten und wählen Sie die Ziel-JRE aus.
Gehen Sie nun links zum Java Compiler und ändern Sie die Compiler-Konformitätsstufe auf Ihr Ziel.
Das hat bei mir funktioniert.
quelle
Wie von mehreren Personen an anderer Stelle beantwortet, wird das Java-Programm auf einer älteren Version von Java ausgeführt als der, für die es kompiliert wurde. Es muss aus Gründen der Abwärtskompatibilität "crosscompiled" sein. Anders ausgedrückt, es gibt eine Nichtübereinstimmung zwischen Quell- und Ziel-Java-Versionen.
Das Ändern von Optionen in Eclipse-Menüs beantwortet nicht das Originalposter, das angab, dass er / sie Eclipse nicht verwendet. In OpenJDK javac Version 1.7 können Sie für 1.6 eine Cross- Kompilierung durchführen, wenn Sie Parameter verwenden
-source
und-target
zur Kompilierungszeit die rt.jar- Datei der Zielversion (dh der älteren) 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). 6.0_60 / jre / lib / rt.jar unter SunOS anscheinend. Entschuldigung, ich weiß nicht, wo es sich auf einem Windows-System befindet. Wie so:Es sieht so aus, als könnten Sie einfach rt.jar aus dem Internet herunterladen und darauf verweisen. Dies ist jedoch nicht zu elegant:
quelle
Basierend auf...
Klicken Sie in Eclipse im Paket-Explorer mit der rechten Maustaste auf das Projekt:
Erstellungspfad -> Erstellungspfad konfigurieren
Unter:
Java Build Path -> Bibliotheken -> Bibliothek hinzufügen -> JRE System Library -> Installierte JREs -> Suchen .
Fügen Sie die erforderliche JRE hinzu, indem Sie die Bibliothek in der Liste auswählen, die nach Abschluss der Suche verfügbar ist.
quelle
Wenn Sie Maven verwenden, legen Sie Ihre Java-Kompilierungsstufe fest. Öffnen Sie eine Befehlszeile und schreiben Sie
java -version
für Ihre Kompilierungsstufe:Wenn Sie IntelliJ IDEA verwenden, wählen Sie Projekt → Datei → Einstellungen → Build Execution Deployment → Compiler → Java Compiler . Ändern Sie dann den Bytecode wie folgt in 1.7:
quelle
Wenn Sie bei der Verwendung von Maven auf dieses Problem stoßen , können Sie Ihren Code mit dem Plug-in Maven Compiler kompilieren .
UPDATE: Setzen
source
undtarget
auf1.8
, wenn Sie JDK 8 verwenden.quelle
Ich hatte die gleiche Fehlermeldung beim Ausführen von Ant unter Eclipse, aber die anderen hier genannten Lösungen haben mein Problem nicht gelöst. Das Lustige war, dass das Ausführen von Ant über die Windows-Befehlszeile einwandfrei lief, sodass es sich um ein Konfigurationsproblem in Eclipse handeln musste.
Es stellte sich heraus, dass Sie unter Eclipse die Umgebung angeben können, mit der Ant ausgeführt werden soll, und diese wurde als JRE anstelle eines JDK festgelegt.
quelle
Dieser Fehler bedeutet, dass die JRE, die zum Ausführen Ihres Klassencodes verwendet wird, die verwendete Java-Version nicht erkennt. Normalerweise, weil die Java-Version, die Ihre Klassendatei generiert (dh kompiliert) hat, 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, mit der er ausgeführt wird. dh installieren Sie das entsprechende JDK.
b) Kompilieren Sie Ihre Java-Quellen mit der neueren Version des Java-Compilers, jedoch im Kompatibilitätsmodus. dh den
-target
Parameter verwenden.c) Führen Sie Ihre kompilierten Klassen in einer JRE aus, die dieselbe oder eine neuere Version aufweist als das JDK, mit dem die Klassen kompiliert wurden.
Sie können die Versionen, mit denen Sie derzeit arbeiten,
javac -version
für den Compiler undjava -version
für die Laufzeit überprüfen .Installieren und konfigurieren Sie zum Kompilieren natürlich das gewünschte JDK.
Zur Laufzeit können Sie die mit dem JDK oder einer eigenständigen JRE gelieferte verwenden. Stellen Sie jedoch unabhängig davon sicher, dass Sie die richtigen Versionen installiert und Ihren PATH so konfiguriert haben, dass es keine Überraschungen gibt.
Die Umgebungsvariable PATH teilt der Befehlsshell mit, wo nach dem von Ihnen eingegebenen Befehl gesucht werden soll. Während der Eingabe durchsucht
java
der Befehls-Shell-Interpreter alle in derPATH
Variablen angegebenen Speicherorte von links nach rechts, um die entsprechendejava
ausführbare Laufzeitdatei für die Ausführung zu finden. Wenn Sie mehrere Versionen von Java installiert haben - dh Sie haben diejava
ausführbare Datei an mehreren in der PATH-Variablen angegebenen Speicherorten -, wird als erste ausgeführt, wenn Sie von links nach rechts wechseln.Der Compiler-Befehl ist
javac
und kommt nur mit dem JDK. Der Laufzeitbefehl istjava
und kommt mit dem JDK und befindet sich in der JRE.Es ist wahrscheinlich, dass Sie eine Version (51.0 = Java 7) von
javac
installiert haben und dass Sie auch dieselbe Version vonjava
installiert haben, aber dass eine andere frühere Version vonjava
früher im PATH angezeigt wird und daher anstelle der erwarteten Version aufgerufen wird .quelle
Sie haben eine höhere Version des JDK verwendet, um eine niedrigere Version von JDK / JRE zu kompilieren und auszuführen .
Informationen hierzu finden Sie in den Versionsinformationen:
Sie werden unterschiedlich sein und Javac wird eine höhere Versionsnummer haben.
Um dies zu umgehen, führen Sie Java aus der JDK-Version aus oder wenn Sie ein neueres JRE / JDK haben, das ebenfalls funktioniert.
which javac
wird Ihnen zum Beispiel den Standort mitteilen, z/usr/bin/javac
. Einfach direkt mit ausführen/usr/bin/java <program>
.ODER Sie können die Umgebungsvariable als permanente Lösung festlegen.
quelle
Hatte dieses Problem, als ich zu Java 6 zurückkehrte und versuchte, Klassen auszuführen, die zuvor mit Java 7 kompiliert worden waren. Was für mich funktionierte, war Einstellungen> Java> Compiler -> Konformitätsstufe auf 1.6 setzen und entscheidend "Projekteinstellungen konfigurieren".
quelle
Heute erschien diese Fehlermeldung in unserem Tomcat 7 unter Ubuntu 12.04.2 LTS (Precise Pangolin):
Die Struts- Anwendung wird mit Java 7 kompiliert.
Es stellte sich heraus, dass jemand "Service Tomcat [Stop / Start]" verwendet, um Tomcat 7 neu zu starten.
Dies verursacht den Fehler "Nicht unterstützte major.minor Version 51.0".
Als wir "/etc/init.d/tomcat7 [stop / start]" verwendeten, um Tomcat 7 neu zu starten, wurde das Problem behoben.
quelle
Ich habe es gelöst. Ich rannte:
Der Fehler ist irreführend
Unsupported major.minor version 51.0
. Dies erweckt den Eindruck, dass Version 51 (Java 7) nicht unterstützt wird. Und wir sollten Java 6 verwenden.Der Fehler sollte gewesen sein:
quelle
Ihre Java-Datei wird mit einer anderen Version (höhere Compilerversion) kompiliert als die Version (niedrigere Laufzeitversion), mit der Sie sie ausführen möchten.
Es ist ein grundlegendes Verständnis, dass Klassen, die mit niedrigeren Versionen kompiliert wurden, voraussichtlich in späteren höheren Versionen ausgeführt werden. Aber das Gegenteil (mit einer höheren Compilerversion kompiliert und versucht, es 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 xx
(Quelle: oracle.com .)
quelle
Oh, Mac OS XI konnte dieses Problem durch Setzen der Variablen JAVA_HOME lösen:
quelle
Lassen Sie uns zuerst einige Grundlagen richtig machen ...
JRE ist eine Komponente in NetBeans / Eclipse / Standalone, die Ihnen Bibliotheken, JVM, Java-Plugins und Java-Webstart bietet. Beachten Sie, dass keine Complier oder Debugger bereitgestellt werden.
JDK ist die Obermenge von JRE zusammen mit Compliern und Debuggern.
Wenn Sie also Ihre Standardbibliothek als JRE anstelle von JDK haben, werden Sie viel Spaß beim Importieren haben, aber es wird nicht kompiliert.
Setzen Sie stattdessen Ihren Pfad auf JDK (ich verwende NetBeans und setze sie mit netbeans.conf in netbeans / etc / netbeans.conf und ändere den Pfad).
quelle
Ich hatte das Problem, dass ich über die Befehlszeile eine Maven-Kompilierung für mein Projekt ausführen musste, um meine Komponententests auszuführen. Wenn ich eine Änderung an der Testklasse vorgenommen und Eclipse diese automatisch neu kompilieren ließ, wurde der Fehler "Nicht unterstützte 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 Projekteigenschaftenseite in Eclipse. Keine Menge an Maven Update Project und / oder Aktualisierung hat dies gelöst.
Schließlich habe ich versucht, das Projekt zu schließen und wieder zu öffnen, und dies schien es zu beheben! HTH
quelle
Sie haben Ihre Java-Klasse mit JDK 7 kompiliert und versuchen, dieselbe Klasse unter JDK 6 auszuführen.
quelle
quelle
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 diese Probleme in AWS ec2-Instanzen hatten und hier irgendwie auf diese Frage umgeleitet wurden. Ich antworte darauf und möchte mitteilen, wie ich es gemacht habe. Ich hatte Probleme, weil auf Amazon EC2-Instanzen Java Version 1.7 ausgeführt wurde und mein Projekt möglicherweise nicht damit kompatibel war, weil ich Maven verwendete und es für Java 1.8 vorkonfiguriert war. Also habe ich eine neue Version von Java installiert:
sudo yum -y install java-1.8.0
Und dann ist der wichtige Schritt, die ältere Version zu entfernen:
Denken Sie daran, es nach der Installation der neuen Version zu löschen, da es sonst kontinuierlich dieselbe ältere Version verwendet und ich hoffe, dass es Ihr Problem löst, das in meinem Fall aufgetreten ist.
quelle