Kann Programm entwickelt, mit Java 8 lauffähig auf Java 7?
Bin ich ein wenig verwirrt.
-
Oracle sagt Java 8 ist in hohem Maße kompatibel mit Java 7 (rückwärts). Aber, welche Möglichkeiten bestehen, die Java-8-Programm ausgeführt werden kann, auf Java 7 erfolgreich (SE/EE)?
-
Wenn Punkt eins war wahr, Java-8-Anwendungen bereitgestellt werden, die Ausführung auf einem Java-7-server-Unterstützung? zum Beispiel, Tomcat WildFly 8 oder?
- Abwärtskompatibel bedeutet, dass Java 7 läuft unter Java 8. Um die Ausführung von Java-8-Bytecode auf der Java-7 würden Sie brauchen, um eine retrotranslate-Typ-Prozess, die ich erwarte.
- Ich verstehe nicht, Ihre zweite Frage. Könnten Sie das klären?
- Sie konnte nicht laufen jdk 8 kompilierten code im jdk 7 und jdk 7 kompiliert code nicht ausführen konnte, die auf jdk8. Aber Sie können kompilieren jdk-7-kompatiblen code mit jdk8 mit angeben einer Eigenschaft während der compile-Zeit z.B. javac -target-1.7 YourClass.java ...
- ja, ich meine, wenn ich ein java-7-server für die Entwicklung mit java 8 oder es ist imposible?
- Ich habe gerade überprüft und WildFly 8 läuft auf Java 8, Tomcat hat einige Probleme und nicht.
- Vielen Dank für deine Hilfe, Karol, ich werde versuchen, mit WildFly. Vielen Dank nochmal 🙂
- einige Server hava java-8-Unterstützung, einige nicht. Wildfly unterstützt, die meisten von Ihnen wahrscheinlich nicht. Sie müssen java-8-Unterstützung zur Bereitstellung von java-8-apps.
- die meisten von Ihnen nicht -> die meisten von anderen Servern nicht
- mögliche Duplikate von Kann Java-8-code kompiliert werden, laufen auf Java 7 jvm?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, Nein.
Die rückwärts-Kompatibilität bedeutet, dass Sie können ausführen von Java-7-Programm auf Java 8 runtime, nicht die andere Weise herum.
Gibt es mehrere Gründe:
Bytecode ist versioniert und JVM überprüft, ob es unterstützt die version, die es findet .class-Dateien.
Einige Sprachkonstrukte ausgedrückt werden können, die in früheren Versionen von bytecode.
Gibt es neue Klassen und Methoden, die in neueren JRE ' s, die funktionieren nicht mit älteren.
Wenn Sie wirklich, wirklich wollen (Tipp: Sie nicht), Sie können erzwingen, die der compiler zur Behandlung der Quelle, wie eine version von Java und emittieren bytecode für die anderen, mit etwas wie dieses:
(das gleiche für Maven), und kompilieren Sie gegen JDK7, aber in der Praxis wird es oft nicht mehr Arbeit als die Arbeit. Empfehle ich Sie nicht.
BEARBEITEN: JDK 8 offenbar nicht unterstützt exakt diese Kombination, so wird dies nicht funktionieren. Einige andere Kombinationen von Versionen funktionieren.
Gibt es auch Programme zum konvertieren von neueren Java-Programme funktionieren auf älteren JVM ist. Für die Umwandlung von Java 8 zu 5-7, können Sie versuchen, https://github.com/orfjackal/retrolambda Zu bekommen geringer als 5, können Sie wählen Sie eine dieser: http://en.wikipedia.org/wiki/Java_backporting_tools
Keiner dieser hacks geben Ihnen neue Java-8-Klassen und-Methoden, einschließlich der funktionalen Programmierung-support für collections, streams, Zeit-API, unsigned API, und so weiter. Also ich würd sagen es lohnt sich nicht.
Oder, da Sie zum ausführen von Java 8 JEE-Anwendungen auf einem application-server, führen Sie einfach den gesamten server auf Java 8 könnte es funktionieren.
javac -source 1.8 -target 1.7 MyClass.java
wird nicht einmal versuchen, etwas zu tun. Siehe dieser thread (und seine Kommentare) für details. AFAIK müssten Sie zu verwenden Compiler-API zu Holen.javac: source release 1.8 requires target release 1.8
, so kann man nicht wirklich tun, was Sie behaupten.Error:java: javacTask: source release 1.8 requires target release 1.8
Abwärtskompatibilität bedeutet
Können Sie Laufen tiefer-Konfiguration auf eine Höhere Konfiguration nicht
Vice-Versa
.Gut, es ist die -Ziel compiler-option, mit der Sie Ziel die Klasse-Datei-format von früheren java-Versionen. Dies bedeutet jedoch nicht das Problem lösen, oder Dinge entdecken, wie die Verwendung von Klassen oder Methoden eingeführt im JDK-APIs nach der target-version.
Keine Abwärtskompatibilität bedeutet, dass Java7 Programme unter Java8 aber das Gegenteil ist nicht immer wahr
Können Sie auch überprüfen, Oracle Limit Abwärtskompatibilität
Im Allgemeinen, neue Versionen zu geben, die Abwärtskompatibilität, so dass die Menschen nicht zu werfen, Ihre Arbeit und können das upgrade leicht. Der andere Weg-Runde (neuere version läuft in der älteren version) ist nicht unbedingt wahr, weil, wenn Sie verwenden einige der neu implementierten Funktion, ist diese Funktion offensichtlich nicht in der vorherigen version und funktioniert nicht.
Hinsichtlich
Ich generierten stubs aus WSDL -, kompiliert in java 8 und war in der Lage, implementieren Sie Sie auf dem server mit java 1.6 jvm auf.