So beheben Sie java.lang.UnsupportedClassVersionError: Nicht unterstützte major.minor-Version

1573

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

Ich habe JRE installiert und meine Pfadvariable zum .../binVerzeichnis 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.

  1. Wie behebe ich das?
  2. Sollte ich das JDK installieren und meine Pfadvariable zum JDK anstelle von JRE einrichten?
  3. Was ist der Unterschied zwischen der PATHVariablen in JRE oder JDK?
ERJAN
quelle
hast du auch jdk installiert? jre ist eine Java RunTime-Umgebung. Um Java-Apps zu erstellen, benötigen Sie ebenfalls jdk
CyprUS
Ja, das habe ich getan, und jetzt zeigt meine Pfadvariable auf jdk. Ich habe immer noch den Fehler "Nicht unterstützte Nebenversion 51.0". Glaubst du, ich sollte eine ältere Version von JDK installieren? Ich benutze JDK 1.7.0
ERJAN
20
Dies passierte mir unter Mac OS X, als ich Probleme aufgrund der seltsamen Situation von Apple Java 6 und Oracle Java 7 unter OSX hatte. Kurzversion: Kompilieren mit JDK7, Ausführen mit JDK6, erhalten Sie diese.
Warren P
7
In Java sollte ClassName mit Großbuchstaben beginnen;)
Ashish Panery
5
Für El Captain hat diese Antwort das Problem
tsuz

Antworten:

1940

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

Die gemeldeten Hauptzahlen sind:

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

(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:

javac -target 1.4 HelloWorld.java

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 .

Juha Palomäki
quelle
167
"Die angezeigte Versionsnummer beschreibt, welche Version verwendet wurde, wenn Java zum Kompilieren des Codes verwendet wurde." Nein, tut es nicht. Es zeigt die Version der JRE, mit der die Klassendatei kompatibel ist. Mithilfe von Cross-Compilation-Optionen können Sie ein 1.7-JDK verwenden, um Code mit einer Klassenversion von 1.1 (bis 1.7) zu kompilieren.
Andrew Thompson
85
Diese Antwort erklärt nicht, wie das Problem behoben werden kann, wenn die Frage gestellt wird.
Jonathan Leung
7
Dies ist eine schöne Lösung zum direkten Kompilieren auf eine frühere Version von Eclipse: stackoverflow.com/a/16345710/2091700
Alphaaa
19
IN Eclipse-Projekt => Proerties => Java-Compiler; Stellen Sie "die Compiler-Konformitätsstufe" auf die Version entsprechend Ihrem jre oder jdk ein. Was mich betrifft, ist es 1.6 für jre 1.6
Sam
5
Dies kann auftreten, wenn die Compilerquelle so eingestellt ist, dass sie nicht mit dem aktuell kompilierten JRE / JDK übereinstimmt. Zum Beispiel habe ich die folgenden Werte aus dem Ordner eclipse .settings gefunden, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPlatform = 1.7. Und mein Compiler war 1.6.0_32. Das Problem wurde behoben, nachdem die Werte auf 1.6 geändert wurden. Das Problem entstand, nachdem ich das Projekt von einem anderen Arbeitsbereich kopiert hatte, in dem ich JDK 1.7 verwendete :(
Gana
367

java.lang.UnsupportedClassVersionError Dies geschieht aufgrund eines höheren JDK während der Kompilierungszeit und eines niedrigeren JDK zur Laufzeit.

Vivek Kumar Ray
quelle
11
+1: Ändern dieses symbolischen Links ( /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 es
Ezdazuzena
1
Wie kann ich die oben genannten Änderungen vornehmen?
Ankur Raiyani
8
Projekt -> Eigenschaften -> Java Compiler Aktivieren Sie projektspezifische Einstellungen. Wählen Sie dann Compiler Compliance Level auf 1.7, 1.6 oder 1.5, erstellen und testen Sie Ihre App.
Vivek Kumar Ray
Als ich zu Java 7 wechselte, versuchte Eclipse irgendwie immer wieder, in Java 6 zu laufen ... keine Ahnung warum. Das alte JDK deinstalliert hat den Trick für mich getan.
HDave
9
@ezdazuzena verwenden, sudo update-alternatives --config javaum dies zu tun.
Thorbjørn Ravn Andersen
115

In Eclipse ging ich einfach zum Menübefehl Fenster -> Einstellungen -> Java -> Compiler und setzte dann "Compiler-Konformitätsstufe" auf 1.6.

Cacovsky
quelle
3
In Eclipse müssen manchmal auch Projektfacetten in die entsprechende Java-Version geändert werden.
Bilal Mirza
6
Vielen Dank. Es ist erwähnenswert, dass das Festlegen der Standardausführungsumgebung von Eclipse (der JRE, die sich auf dem Erstellungspfad befindet) eine separate Einstellung ist. Ich hatte die JRE festgelegt, aber nicht die Compiler-Konformitätsstufe. das hat es behoben.
wchargin
Und wie haben Sie aus der Fehlermeldung den Schluss gezogen, dass dies der richtige Ort war, um die Option festzulegen?
Alexander
Vielleicht kann dies helfen : stackoverflow.com/questions/7073485/… kann helfen, wenn Sie Ameise und Eclipse verwenden.
OuuGiii
Die Frage bezieht sich auf Notepad ++, aber nicht auf Eclipse.
Ich bin
60

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.

ERJAN
quelle
29
Java 7 kann auch problemlos mit 6 umgehen.
Damienix
@damienix Sie möchten wahrscheinlich angeben, dass Java 7 JRE problemlos eine mit Java 6 kompilierte Klasse verarbeiten kann, da sonst Ihre Aussage zu Verwirrung führt.
Frontear
43

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

Beispielsweise .classkö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:

  • Aktualisieren Sie Ihre Java-Laufzeit oder
  • 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!

Brad Parks
quelle
22

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

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 -versionangezeigt 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/javacund angeben /home/user/jdk1.7.0_11/bin/java.

Aniket Thakur
quelle
18

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

Geben Sie im Terminal Folgendes ein

vi ~/.profile

Fügen Sie dann diese Zeile in die Datei ein und speichern Sie sie

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

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

source ~/.profile 

Geben Sie dann java -version ein, um das Ergebnis zu überprüfen

java -version 

Was ist eine .profileDatei?

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

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

Tony
quelle
16

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.

Andreas L.
quelle
14

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.

Rio
quelle
14

Das häufigste Problem ist eine Fehlkonfiguration Ihrer JAVA_HOMEVariablen, 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 überprüfen, welches Java (openjdk) Sie installiert haben, überprüfen Sie über:

dpkg -l "openjdk*" | grep ^i

oder:

update-java-alternatives -l

Verwenden Sie zum Ändern Folgendes:

update-alternatives --config java

sudoBei Bedarf Präfix mit .

um die alternative Java-Version auszuwählen.

Oder überprüfen Sie, welche zur Installation verfügbar sind:

apt-cache search ^openjdk

sudoBei Bedarf Präfix mit .

Dann können Sie zum Beispiel installieren:

apt-get install openjdk-7-jre

sudoBei Bedarf Präfix mit .

Fedora, Oracle Linux, Red Hat

Installieren / aktualisieren Sie das entsprechende Paket über:

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

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

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-alternativessollte jedoch funktionieren.

Kenorb
quelle
Diese Antwort hat bei mir funktioniert, als ich versucht habe, spark2-shell auf einem Host zu verwenden, nachdem der Spark-Service einem Cluster mit Cloudera hinzugefügt wurde.
Alter
12

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.

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

Dies hat bei mir funktioniert, um das nicht unterstützte Hauptproblem zu lösen.

Mandar Pandit
quelle
12

Als ich JDK 1.7 installiert habe , wurde das Problem behoben.

user3168034
quelle
12

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.

Ben
quelle
11

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 -sourceund -targetzur 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:

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 einfach rt.jar aus dem Internet herunterladen und darauf verweisen. Dies ist jedoch nicht zu elegant:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
Streitkolben Ojala
quelle
10

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

Adit Ya
quelle
10
  • Wenn Sie Maven verwenden, legen Sie Ihre Java-Kompilierungsstufe fest. Öffnen Sie eine Befehlszeile und schreiben Sie java -versionfür Ihre Kompilierungsstufe:

    Geben Sie hier die Bildbeschreibung ein

  • Wenn Sie IntelliJ IDEA verwenden, wählen Sie Projekt → DateiEinstellungenBuild Execution DeploymentCompilerJava Compiler . Ändern Sie dann den Bytecode wie folgt in 1.7:

    Geben Sie hier die Bildbeschreibung ein

ethemsulan
quelle
Ich musste auch eine Maven-Neuinstallation durchführen, nachdem ich den Pom gewechselt hatte.
Joe Borysko
10

Wenn Sie bei der Verwendung von Maven auf dieses Problem stoßen , können Sie Ihren Code mit dem Plug-in 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 sourceund targetauf 1.8, wenn Sie JDK 8 verwenden.

Thamme Gowda
quelle
Ein Ausschnitt darüber, wie man das Plugin zum Cross-Compilten verwendet, wäre sehr gut, anstatt den Link zu besuchen / zu öffnen
coding_idiot
8

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.

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

Wie behebe ich das?

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 -targetParameter 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 -versionfür den Compiler und java -versionfür die Laufzeit überprüfen .

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

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.

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

Die Umgebungsvariable PATH teilt der Befehlsshell mit, wo nach dem von Ihnen eingegebenen Befehl gesucht werden soll. Während der Eingabe durchsucht javader Befehls-Shell-Interpreter alle in der PATHVariablen angegebenen Speicherorte von links nach rechts, um die entsprechende javaausführbare Laufzeitdatei für die Ausführung zu finden. Wenn Sie mehrere Versionen von Java installiert haben - dh Sie haben die javaausfü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 javacund kommt nur mit dem JDK. Der Laufzeitbefehl ist javaund kommt mit dem JDK und befindet sich in der JRE.

Es ist wahrscheinlich, dass Sie eine Version (51.0 = Java 7) von javacinstalliert haben und dass Sie auch dieselbe Version von javainstalliert haben, aber dass eine andere frühere Version von javafrüher im PATH angezeigt wird und daher anstelle der erwarteten Version aufgerufen wird .

Vihung
quelle
7

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:

javac -version

java -version

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

L Lawliet
quelle
6

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

user3534268
quelle
6

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

/var/log/tomcat7/localhost.2014-04-08.log:
8. April 2014, 9:00:55 Uhr org.apache.catalina.core.StandardContext filterStart
SEVERE: Ausnahme beim Starten des Filters struts2
java.lang.UnsupportedClassVersionError: controller / ReqAccept: Nicht unterstützte major.minor-Version 51.0 (Klassencontroller kann nicht geladen werden.ReqAccept)

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.

$ 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"

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.

$ 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"

Orakel
quelle
6

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 erweckt den Eindruck, dass Version 51 (Java 7) nicht unterstützt wird. Und wir sollten Java 6 verwenden.

Der Fehler sollte gewesen sein:

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

Siddharth
quelle
6

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

F: Ich habe eine Anwendung in Java 7 erstellt, aber wenn meine Benutzer versuchen, sie auszuführen, wird der Fehler "Nicht unterstützt major.minor Version 51.0" angezeigt. Was bedeutet das und was kann ich dagegen tun?

A: Wenn Sie eine Anwendung mit Javac in Java 7 kompilieren, haben die resultierenden Klassendateien die Versionsnummer 51.0. Java-Versionen vor 7 erkennen diese Nummer nicht, sodass Ihre Benutzer vor dem Ausführen Ihrer Anwendung ein Upgrade auf Java 7 durchführen müssen. Wenn Sie keine Java 7-APIs verwenden, können Sie versuchen, Ihre Anwendung mit javac -target 1.6 zu kompilieren, um eine 1.6-kompatible Klassendatei zu erstellen. Wenn Ihre Anwendung über Webstart bereitgestellt wird, können Sie die erforderliche Mindestversion angeben. Weitere Informationen finden Sie in den Dokumenten zu Java Web Start und JNLP hier. Dieses Problem wird behoben, sobald wir für Endbenutzer, die derzeit Java 6 auf ihren Desktops haben, die automatische Aktualisierung auf Java 7 auslösen. Der Zeitplan hierfür ist noch nicht festgelegt. Wir möchten Entwicklern Zeit geben, um zuerst Probleme zwischen ihrem Code und JDK 7 zu lösen.

(Quelle: oracle.com .)

Manohar
quelle
5

Oh, Mac OS XI konnte dieses Problem durch Setzen der Variablen JAVA_HOME lösen:

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

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

Creative_Cimmons
quelle
3

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

Matthew Wise
quelle
3

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

Sagar Varpe
quelle
3
  • 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 JDK 7.0.55 auf dem Erstellungspfad konfigurieren.
  • Stellen Sie den Compiler in Eclipse für JDK 7.0.55 über das Menü Windows -> Einstellungen -> Java -> Compiler ein - wählen Sie 1.7.
siddmuk2005
quelle
3

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:

sudo yum remove java-1.7.0-openjdk

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.

Siddharth Choudhary
quelle