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.
PATH
in JRE oder JDK?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.
Java.lang.UnsupportedClassVersionError
geschieht aufgrund einer höheren JDK während der Kompilierzeit und einer niedrigeren JDK zur Laufzeit.
In Eclipse ging ich einfach zum Menübefehl Window -> Preferences -> Java -> Compiler und setzte dann "Compiler Compliance Level" auf 1,6.
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.
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:
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!
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.
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.
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.
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"));'
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.
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 PaketJava-1.7.0-openjdk-devel
.
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 .
Installieren Sie einfach die entsprechende Java SE Development Kit-Bibliothek von der Oracle-Site oder installieren Sie sie
Wenn dieses Problem mit Jenkins auftritt, lesen Sie:
Die Auswahl der richtigen Java-Version (neuer) mit update-alternatives
sollte jedoch funktionieren.
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.
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.
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.
Bei der Installation von JDK 1.7 wurde das Problem behoben.
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
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.
Wenn Sie Maven verwenden, legen Sie Ihre Java-Kompilierstufe fest. Öffnen Sie eine Befehlszeile und schreiben Sie Java -version
für Ihre Kompilierstufe:
Wenn Sie IntelliJ IDEA verwenden, wählen Sie Projekt → Datei → Einstellungen → Build Execution Deployment → Compiler → Java-Compiler. Dann ändern Sie den Bytecode als 1.7 wie dieses Bild:
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.
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.
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.
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.
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)
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 .)
Hatte dieses Problem, als ich zu Java 6 zurückkehrte und versuchte, Klassen auszuführen, die zuvor mit Java 7 kompiliert wurden.
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"
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
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).
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
Sie haben Ihre Java-Klasse mit JDK 7 kompiliert und versuchen, dieselbe Klasse unter JDK 6 auszuführen.
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.
Seit Java 9 wird -target
durch --release
ersetzt.
Bis Java 11 sind die verfügbaren Nummern für --release
6
7
, 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.
In der zukünftigen Version werden weitere ältere Versionen entfernt:
Welche Zielversionen von javac unterstützt werden, können Sie über den Befehl ermitteln:javac -help | grep releases
Eine weitere Möglichkeit, dies unter Mac OS X mit Homebrew zu beheben, ist folgende:
brew install Caskroom/cask/Java
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.
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.
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
Sie sind fertig!
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.
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
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.
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.
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.
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.
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
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.
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.
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>